2017-10-20 47 views
0

私は3つのテーブルを持っている、第一は、2日からFKを持ち、そして第二は、第三のFKを持っている:私は必要なものEraquent in Laravel-Datatables、selectで選択しますか?

Table 1: [admin_demandas] 
------------------------- 
id_demanda| projec_id 
------------------------- 

Table 2: [admin_projec] 
------------------------- 
id_projec | sub_id 
------------------------- 

Table 3: [admin_sub] 
------------------------- 
id_sub | name 
------------------------- 

は、表3から「名前」を取得することですが、始まりますテーブルのモデル1.

私はこのような何かしようとしていた。これらの2(JOINの3つのテーブルを行う方法がわから(2テーブル)を登録しようではなく、私は1つだけで、私のDataTableをやった

$data = AdminDemanda::select([ 
    'id_demanda', 
    'admin_projec.sub_id AS sub_id', 
    'admin_sub.name AS name',]) 
    ->join('admin_projec', 'admin_demandas.projec_id', '=', 'admin_projec.id_projec') 
    ->join('admin_sub', 'admin_projec.sub_id', '=', 'admin_sub.id_sub') 
    ->get(); 

return Datatables::of($data)->make(true); 

を)。このエラーが発生しました:

[Err] 1054 - Unknown column 'admin_projec.sub_id' in 'on clause' 

クエリで変更する必要があるものはありますか? DB :: raw()クエリでEloquentの代わりにクエリビルダーを使用する必要がありますか?

答えて

0

あなたは、あなたのモデルexempleことで

あなたは、同じ種類のを使用してAdminProjecモデルを編集して

\AdminSub::first()->projec(); 

を行い、継続することができるはずです

public function projec(){ 
    return $this->hasMany(AdminProjec::class , 'sub_id'); 
} 

モデルAdminSubで編集する必要があります関係

public function demandas(){ 
    return $this->hasMany(AdminDemandas::class , 'projec_id'); 
} 

そして今、あなたはこれで解決

//I do not remember which one will works 
\AdminSub::first()->projec()->first()->demandas()->name 
//or 
\AdminSub::first()->projec()->first()->demandas()->get()->name 
+0

私が書いたコードは一例です.2番目のテーブルは4つのFKのように別のテーブルを指していますが、別の方法でクエリをインすることができますモデルを編集していますか?とにかくこのモデルの事は動作しますか?ありがとう、私は後でそれを試してみます。 – pmirnd

+0

モデルを使用することはデータベース関係を扱う最良の方法ですと私は思います。あなたはそれらを一度しか設定しないので、すべてはいつでも動作します。フィールド名のテーブル名を変更した場合、それを実行するためにいくつかのものを編集するだけで済みます。ジョインでフル・クエリーを使用する場合は、このテーブル/フィールドを使用する各ページを編集する必要があります。アプリケーションが大きくなると、それは本当に悪夢になります。 – Raccoon

0

を試みることができる:

$datos = AdminDemanda::select([ 
    'id_demanda', 
    'admin_dis.nombre AS nombre_dist', 
    'admin_sub.nombre AS nombre_subes', 
    'mes AS mes_demanda', 
    'admin_sistemas.nombre AS nombre_sistema', 
    'admin_demandas.demanda_mwh AS mwh']) 
    ->join('admin_projec', 'admin_demandas.proyeccion_demanda_id', '=', 'admin_projec.id_proyeccion_demanda') 
    ->join('admin_sub', 'admin_projec.subestacion_id', '=', 'admin_sub.id_subestacion') 
    ->join('admin_dis', 'admin_projec.dist_id', '=', 'admin_dis.id_dist') 
    ->join('admin_sistemas', 'admin_projec.sistema_id', '=', 'admin_sistemas.id_sistema') 
    ->get(); 

Inner join between three tables in mysql

それは今、誰がそれを必要とする場合には、私のDataTableクエリがある...簡単でした

+1

うれしいことです。ベストプラクティスのために、後でEloquentとこの問題を解決してください。 @Raccoonによって提案されたように、多くの結合を使うよりもずっとうまくいくでしょう。最終的には、テーブル間のこのような関係をもっと理解しやすくなります。 –

+0

ありがとう、私はたくさん試しましたが、私はそれを得ることができませんでした。しかし私は知っている、私はLaravelが提供するものを利用しなければならない – pmirnd

関連する問題