Найти товар с последнего документа. Laravel mysql

Допустим прием товара осуществляется по 2 таблицам documents, products
document = id, title, data
products = id_product, id_document, quantity, price

Нужно найти последний документ(document) который содержит в себе определенный id_product. А также вывести все их данные (->select('documents.', 'products.'))

Чёт вообще не могу понять куда копать. Нашел поиск по наивысшей дате, но как указать, что в этом документе должен быть указан данный товар.

\DB::table('documents')
            ->max('data');

Как это объединить с max? думаю вообще не туда копаю

\DB::table('documents as doc')
            ->join('products as prod', 'doc.id','=','prod.id_document')
            ->where('prod.id_product', '=', 5)
            ->get();

Прошу помочь решить, такую не большую задачку.


Ответы (2 шт):

Автор решения: Alex

Наверно нашел решение. Вроде работает, но чёт думаю можно лучше сделать.

\DB::table('products as prod')
            ->select('prod.*','document .*')
            ->leftJoin('document AS doc', 'prod.id_document' ,'=', 'main.id')
            ->where('prod.id_product', '=', 1)
            ->orderBy('doc.data', 'DESC')
            ->first();
→ Ссылка
Автор решения: Yauhen Kib

Можно лучше.. всё это делается через отношения

class Document extends Model
{
    ...

    public function products()
    {
        return $this->hasMany(Product::class, 'document_id', 'id');
    }

}

Потом в коде используете

$productId = 10;

$document = Document::whereHas('products', function($query) use ($productId) {
    $query->where('id', productId);
})->orderBy('data', 'desc')->first();

foreach($document->products as $product) {
    dump($product);
}

И переименуйте data в date, если речь о дате.

→ Ссылка