私は現在、多くのテーブルを持っていますが、簡単にするために、2つの影響を受けるテーブルを示します。 Laravel eloquent relationshipユーザーIDの問題
あるユーザが多くのアナウンスを持つことができ、1だけが一人のユーザに属して発表する発表
- ユーザー:彼らは、で構成されています。それは多対1の関係のように思える(または私は考える)。データベースの
スキーマの作成:モデルも非常に簡単です
Schema::create('X_USER', function($table) { $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->string('password', 60); $table->rememberToken(); $table->timestamps(); }); Schema::create('X_ANNOUNCE', function (Blueprint $table) { $table->increments('id'); $table->integer('created_by')->unsigned(); $table->foreign('created_by')->references('id')->on('X_USER')->onDelete('cascade'); $table->timestamps(); });
は、今私はユーザーモデルでこれを持っている:
:上public function announces() { return $this->hasMany('App\Announce', 'created_by'); }
そしてこのモデルを発表
public function user() { return $this->belongsTo('App\User', 'created_by'); }
私は私laravelのAnnounceController.php(ストア機能)上で次の操作を行い発表挿入します
$announce = Announce::create($request->all()); return Response::json([ 'message' => 'Announce Created Succesfully', 'data' => $this->transform($announce) ]);
この前の行は、実際に正しくデータベース内のすべてを挿入します。これまでのところ何も間違っていない私は、私はフロントエンドに渡したいでしょう形式でJSONを返す「変革」かまで:私は
$user = Announce::find($announce['created_by'])->user
を行うとprivate function transform($announce) { //Get User $user = Announce::find($announce['created_by'])->user; return [ 'announce_id' => $announce['id'], 'announce_title' => $announce['title'], 'announce_user_id' => $user->id, 'announce_created_by' => $user->name, ]; }
私は正しいID(する$ user-> IDを取得することはありません)。しかし、$ user-> idと$ user-> nameは一貫性があり、正しいものではありません。 id($ announce ['created_by'])も正しいことを確認しました。
私はこの質問が最高の質問ではないことを理解していますが、スタックやチュートリアルをチェックして長時間試してみるといいでしょう。
あなたの最初の提案で** Undefinedプロパティ:Illuminate \ Database \ Eloquent \ Builder :: $ user **を得ました。 2番目に**非オブジェクト**のプロパティを取得しようとしています。 今のところうまくいきませんでしたが、ヒントのためにありがとうございます – Xelnag
@Xelnag私は最初の方法を更新しましたが、おそらくこの方法では動作しません。 2番目の例では、 '$ announce-> user-> id'の代わりに、それぞれのアナウンスに対してユーザーが設定されていることを確認してください。' $ announce-> user?$ announce-> user-> id: 'no user'と名前は同じ –
私は最初のものを試してみましたが実際には動作しますが、 ' - > first()'関数を使わないと "id"にマッチします。 2番目のものについては、ちょうどうまくいきません、私はそれらのすべてが空ではないことを確かめ、そのインラインIFを置くことさえできませんでした。 – Xelnag