Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Laravel mendapatkan rekor terbaru untuk setiap grup

Anda dapat menulis ulang kueri Anda sebagai gabungan kiri untuk mendapatkan hasil yang sama

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

dan saya kira Anda dapat dengan mudah mengubah kueri di atas dalam cakupan Anda seperti

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 pilih semua baris dengan maksimum create_at

Laravel - Dapatkan entri terakhir dari setiap jenis UID

Laravel Eloquent group menurut catatan terbaru

Edit menggunakan kueri di atas sebagai has relasi,Untuk mendapatkan riwayat terbaru untuk setiap bagian, Anda dapat menentukan hasOne hubungan seperti

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.*');
    }
}

Dan kemudian untuk memuat bagian dengan riwayat terbarunya, Anda dapat dengan senang hati memuat pemetaan yang ditentukan di atas sebagai

$parts = Part::with('latest_history')->get();

Anda akan memiliki daftar suku cadang beserta riwayat terbaru sebagai

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 di Cloud - Migrasi Online Dari Amazon RDS ke Instans EC2:Bagian Satu

  2. Pelacakan Tayangan Spanduk - Desain Basis Data

  3. Kelompokkan hasil mysql dalam kelompok empat

  4. Tidak ditemukan driver yang cocok untuk jdbc:mysql netbeans, *.jar termasuk dalam perpustakaan

  5. Pilih nilai yang dimulai dengan angka