sql >> データベース >  >> RDS >> Mysql

Laravelは各グループの最新のレコードを取得します

    クエリを左結合として書き直して、同じ結果を得ることができます

    select a.* 
    from part_histories a
    left join part_histories b on a.part_id = b.part_id 
                                and a.created_at < b.created_at
    where b.part_id is null
    

    スコープ内のクエリの上で簡単に変換できると思います

    public function scopeWithLatestStatus($query)
    {
        return $query->leftJoin('part_histories as b', function ($join) {
                    $join->on('a.part_id', '=', 'b.part_id')
                         ->where('a.created_at', '<', 'b.created_at');
                })
            ->whereNull('b.part_id')
            ->from('part_histories as a')
            ->select('a.*');
    }
    

    Laravel Eloquent select最大created_atのすべての行

    Laravel-取得各UIDタイプの最後のエントリ

    LaravelEloquentグループの最新レコード

    上記のクエリを使用して、hasとして編集します 関係、各パーツの最新の履歴を取得するには、hasOneを定義できます のような関係

    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    use Illuminate\Support\Facades\DB;
    class Part extends Model
    {
        public function latest_history()
        {
            return $this->hasOne(\App\Models\PartHistory::class, 'part_id')
                ->leftJoin('part_histories as p1', function ($join) {
                    $join->on('part_histories.part_id', '=', 'p1.part_id')
                        ->whereRaw(DB::raw('part_histories.created_at < p1.created_at'));
                })->whereNull('p1.part_id')
                ->select('part_histories.*');
        }
    }
    

    そして、最新の履歴を持つパーツをロードするには、

    として定義されたマッピングを超えてロードすることを熱望することができます。
    $parts = Part::with('latest_history')->get();
    

    パーツのリストと最新の履歴が表示されます

    Array
    (
        [0] => Array
            (
                [id] => 1
                [title] => P1
                [latest_history] => Array
                    (
                        [id] => 6
                        [created_at] => 2018-06-16 08:25:10
                        [status] =>  1
                        [part_id] => 1
                    )
    
            )
    ....
    )
    



    1. JavaでOSのスリープイベントとウェイクアップイベントを検出する

    2. MySQLのSELECTが機能しない

    3. MySQLデータベースに2回保存されたデータ。私が何を間違えているのか分かりませんか?

    4. Ruby:mysql2-Gemが機能しない(Mac OS X Snow Leopard、Ruby 1.9.2)