2017-07-16 18 views
0

参加雄弁クエリ、可能私は三つのモデルを持っている

driver-> hasManyの(dpsObject) driver-> belongsToの(指定)

指定 - > hasManyの(ドライバー)

dpsObject-> belongsToの(ドライバー)

私は3つのユーザ入力の値に対応dpsObjectレコードのリストを返すようにクエリを記述しようとしている:日付範囲(FromとTo)を保持するdpsObject内のEntryDateフィールドの値と、DesignationオブジェクトのDesignation_nameフィールドの値を保持するDesignation入力とを含む。 は現在、これが私のクエリです:

$dps = dpsObject::where([['entryDate', '>=', $from], 
           ['entryDate', '<=', $to]]); 

から$と$のは、提出フォームのユーザーから得要求値を保持します。 dpsObjectレコードを持つドライバの指定名を取得するために、クエリを完了する必要があります。課題は、dpsObjectモデルには存在しませんが、ドライバおよび指定モデルのみに存在します。これは、データベースモデルを維持する方法です。私はジョイントなどを使用する必要があると思いますが、どうやってそれをどうやって行くのかはわかりません。

このようなクエリを作成する最良の方法は何ですか?

種類は、あなたがネストされたwhereHas()を使用することができます

答えて

0

について:

ここ
$dpsObjects = dpsObject::whereBetween('entryDate', [$from, $to]) 
    ->whereHas('driver', function ($q) use($designationName) { 
     $q->whereHas('designation', function ($q) use($designationName) { 
      $q->where('designation_name', $designationName); 
     }); 
    }) 
    ->get(); 

designationdriverbelongsTo()関係です。

+0

@Alexyこれは私が得ているエラーです。 SQLSTATE [HY000]:一般的なエラー:1267操作 '='のための照合(utf8mb4_general_ci、IMPLICIT)および(utf8mb4_unicode_ci、IMPLICIT)の照合ミックスが不正です(SQL:select * from 'dps_objects'ここで、' entryDate'は2017-07-01と2017-07-01にあり、 'dps_objects'.driver_no' =' drivers'.driver_no'で存在するもの(select * from 'designations'は' drivers'.designation_name' = '指定'.'designation_name'と' designation_name' = Total))) これは関係の設定方法と関係がありますか? – MGS

関連する問題