[Laravel] Eloquentでupdate(from subquery)を実行するには?

下記のようなSQL文をEloquentで実行したいのですが、うまくいきません。
対象のデータベースはポスグレです。

対象のテーブル「target_table」を、列「new_sort_key」で並び替え、
新しい「sort_no」を設定するSQLです。

lang

update target_table t set sort_no = sort_dtl.new_sort_no from (select sort_no,row_number() over(order by new_sort_key) as new_sort_no from target_table where t_no = 123 ) as sort_dtl where t.t_no = 123 and t.sort_no = sort_dtl.sort_no

以下のようにしたところ、うまく動きませんでした。

php

class TargetTable extends Model{ protected $connection = 'pgsql'; protected $table = 'target_table '; //テーブル名は複数形にしない ・・・・・・・・・・省略・・・・・・・・・・・・ public function sort() {$tno = 123; $subquery = $this->select('sort_no' , DB::raw('row_number() over(order by new_sort_key) As new_sort_no') ) ->where('t_no ', '=', $tno); $this->where('t_no ', '=', $tno) ->joinSub($subquery,'sort_dtl',function($join) { $join->on('target_table .sort_no', '=', 'sort_dtl.sort_no') ; }) ->update(['sort_no' => DB::raw('sort_dtl.new_sort_no'));}

php

上記でだめだったので、 $this->where('t_no ', '=', $tno)の箇所を $this->fromsub($subquery,'sort_dtl')・・・ と書き換えてもみましたが、update対象のテーブル自体がサブクエリになってしまいNGでした。

恐らく全く見当違いなプログラムになっているとは思います・・・。
Eloquent自体初心者で、頭を抱えている状態です。

sqlを実行するためのEloquentはどのような感じになるか、お知恵をお貸しいただけないでしょうか。
よろしくお願いいたします。

コメントを投稿

0 コメント