Laravel 5.4で質問があります。
EloquentのModelAとModelBがあり、ModelAがModelBに対して1対多の関係(hasMany)となっています。
今、ModelAが所有するModelBの最新レコードの特定のカラム(columnA)が1になっているModelAを抽出したいのですが、どのようにすればQueryを構築できるかご教授いただけると助かります。
よろしくお願いします。
(追記)
取り急ぎ、試したことを2つ追加させていただきます。いずれも最新レコードだけが抽出対象とならず、すべてのModelBから抽出されてしまいました。
1)リレーションの追加
modelAの定義に以下を追加。
public function latest_modelB() { return $this->hasOne('App\Models\Eloquent\modelB', 'projectId', 'id')->orderBy('created_at', 'desc')->take(1); }
そして、hasWhereを使ってみました。
$query->hasWhere('latest_modelB', function($subquery){ $subquery->where('columnA', 1); })
2)leftjoin()を使用
$query->leftJoin('modelB_no_table', function ($join) { $join->on('modelB_no_table.modelAId', '=', 'modelA_no_table.id') ->orderBy('id', 'desc')->take(1); }) ->where('modelB_no_table.columnA', 1);
まだ、上手くはいってないのですが、modelBのmax('id')をサブクエリのwhereで使えないかなと思い、試行錯誤していますが、うまくSQLを構築できません。
試したことは以上になります。引き続き、よろしくお願いします。
調べてみたことやってみたことがあれば追記してください。https://teratail.com/help/question-tips#questionTips1-2
プログラムコード(およびエラーメッセージ)は```で囲ってください。(わからなければ質問編集画面でコード部分を選択し<code>ボタンを押してください)正しく反映されているかどうかは質問編集画面のプレビューを見ながら編集していってください。
不明な点は、SQL文そのもの自体も不明なのか、それはわかるが、そのSQLをEloquentで組み立てることが不明なのでしょうか?
ご返信ありがとうございます。Eloquentで組み立てることが不明です。
mts10806様>```で囲みました。不慣れなもので申し訳ありません。
組み立てることが不明とのことであれば、想定するSQL文をご提示されるとよろしいのではないでしょうか。