Найти товар с последнего документа. 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 шт):
Наверно нашел решение. Вроде работает, но чёт думаю можно лучше сделать.
\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();
Можно лучше.. всё это делается через отношения
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, если речь о дате.