化学物質データベースで作業していて、私が行っているようにEloquentを学んでいます。これはLaraval自体ではなくSlim Frameworkにあります。 このスレッドは、私が必要なものに近づけるのを助けましたが、奇妙なものが見えています。解決策を見つけることができませんでしたが、多くの人が同様の質問をしました。Eloquent eager loadedクエリが結合でうまく動作しない
私は2をコメントアウトジョイン
$chemicals = $app->Chemical->with(array('Company', 'Room', 'Location', 'Measurement'))
->join('company', 'company_id', '=', 'company.id')
//->join('room', 'room_id', '=', 'room.id')
//->join('location', 'location_id', '=', "location.id")
->where('company', '=', 'ROUSSEL')
->get();
お知らせがあります。それらの2つのフィールドは私のテーブルに正しく表示されますが、会社は空白です。どの結合が表示されるかを切り替えると、それに合わせます。
私がジョインを使用しない場合は、化学フィールドの1つでどこでも問題ありません。私の質問は、なぜ結合があるとその特定のステートメントを壊すように見えると、それを修正する方法はありますか?私は、それが何かのものであることを感じて、シーンの後ろにある種のことをしているが、特定のものを見つけることができませんでした.. ありがとう、
私は試してみましたEager Loading以前の制約。
$chemicals = $app->Chemical->with(
array(
'Company',
'Room',
'Measurement',
'Location' => function ($query) {
$query->where('location', '=', 'FLAMCAB');
}
))
//->where('company', '=', 'FISHER')
->get();
ここでコメントアウトされていない部分は、化学品の表にcompanyという列がないというメッセージが表示されます。 は、それを使用して、私は結果を取得しないでください:あなたは、それは場所のテーブルをフィルタリングし見ることができるように
を、それはそれは私が「とは何である、ということで化学物質をフィルタリングしていないだけで、あることありません私はやっています。あなたがそれらに関連する場所に基づいて化学物質をフィルタリングする場合
あなたは 'join'を使う必要がありますか? [Relationships](https://laravel.com/docs/5.1/eloquent-relationships)をまだ見ていますか? – alexw
こんにちは@alexw、私はこの特定のクエリのためにする必要があると思った。私はこれらの4つのオブジェクトのそれぞれに化学物質が属しているという点で関係を使用しています。そこに私がやろうとしていることをするために使うことができる何かがありますか? – danny2327
私が言っていることは(あなたの最後の質問からあなたのスキーマを覚えていれば)、それらの 'join'節は不要と思われます。彼らはあなたの化学物質のそれぞれの関連する会社、部屋、場所を掴んでいるようです。しかし、 'belongsTo'関係が既に定義されている場合、' with'節は各化学物質の関連会社、部屋、場所を取得するのに十分でなければなりません。 – alexw