Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Laravel otrzymuje najnowsze rekordy dla każdej grupy

Możesz przepisać zapytanie jako left join, aby uzyskać te same wyniki

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

i myślę, że możesz łatwo przekształcić powyżej zapytania w swoim zakresie, na przykład

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 wszystkie wiersze z maksymalną liczbą created_at

Laravel - Pobierz ostatni wpis każdego typu UID

Laravel Eloquent grupa według najnowszego rekordu

Edytuj za pomocą powyższego zapytania, ponieważ has relacji, Aby uzyskać najnowszą historię dla każdej części, możesz zdefiniować hasOne relacja jak

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

A następnie, aby załadować części z ich najnowszą historią, możesz szybko załadować powyżej zdefiniowane mapowanie jako

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

Będziesz mieć listę części wraz z najnowszą historią jako

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. Narzędzia wykresów Google z PHP i MySQL

  2. Jak zaktualizować MySQL za pomocą PHP i AJAX bez ODŚWIEŻANIA STRONY?

  3. Jak wyeksportować bazę danych z instancji Amazon RDS MySQL do instancji lokalnej?

  4. Jak dodać kryteria wyszukiwania i filtrowania w Yii

  5. autouzupełnianie pokazuje wszystkie wpisy, nie wykonuje żadnego wyszukiwania