Mysql
 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 всички редове с max created_at

Laravel - Вземете последното въвеждане на всеки тип UID

Групиране на Laravel Eloquent по най-скорошен запис

Редактирайте, като използвате горната заявка като has Relation, За да получите най-новата история за всяка част, можете да дефинирате 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да настроите MySQL репликация в RHEL, Rocky и AlmaLinux

  2. Изброяване на таблици, използвани в mysql заявка?

  3. не може да се свърже с MySQL база данни чрез външен IP адрес

  4. Синтаксис на SQL „LIKE“.

  5. ServiceStack.OrmLite:Къде е методът за писане на персонализиран SQL и връщане на набора от резултати?