我是laravel的新手。
我有两张桌子。 1)产品 2)价格
-----------------------------
- products -
-----------------------------
- id_product | int (p_key) -
- name | varchar -
-----------------------------
-------------------------
- prices -
-----------------------------
- id_price | int (p_key) -
- id_product | int -
- price | int -
-----------------------------
products
表包含有关id
,name
等产品的数据,...
价格变化存储在prices
表格中,其中最后一条记录是应向用户显示的最新价格。
现在我想搜索products
并从prices
表中获取每个产品的最后价格。这是我的疑问:
$result = DB::table('products')->leftJoin('prices', function($join) {
$join->on('products.id_product', '=', 'prices.id_product');
})->whereRaw(MY_SEARCH_FILTERS);
上面的代码是错误的,因为如果产品在prices
表中有4条记录,那么它将在$result
中重复4次,但只显示最后一条价格的1条记录。< / p>
答案 0 :(得分:1)
您可以使用Laravel Elquent使其变得简单:
class Product extends Model
{
public function lastPrice()
{
// optional: change id_price to created_at by add created_at to prices table
return $this->hasOne(Price::class)->orderBy('id_price', 'DESC');
}
}
现在
public function getProducts(){
$MY_SEARCH_FILTERS=....;
// get all products with last price
$products=Product::with('lastPrice')->whereRaw(MY_SEARCH_FILTERS)->get()
return $products
}
答案 1 :(得分:0)
你需要在这里添加两件事,
1)orderBy降价价格表 2)DB :: table函数中的第一个子句(它只获取1条记录,这将是最新的价格)
解决方案:
$result = DB::table('products')
->leftJoin('prices',function($join)
{
$join->on('products.id_product', '=', 'prices.id_product')
})->whereRaw(MY_SEARCH_FILTERS)
->orderBy('prices.id_price','desc')
->first();
您也可以使用(Laravel 5.1):
$result = DB::table('products')
->leftJoin('products.id','=','prices.id_product')
->whereRaw(MY_SEARCH_FILTERS)
->orderBy('prices.id_price','desc')
->first();
答案 2 :(得分:0)
在这里,我们有2个表 users 和 answers ,其中 users 是左表,而 answers 是右表有用户答案。
我们想让用户与答案保持联接,但该联接应与最新记录或 answers 表保持一致。
$query = Users::select('users.id', 'users.user_name','answers.created_at as last_activity_date')
->leftJoin('answers', function($query)
{
$query->on('users.id','=','answers.user_id')
->whereRaw('answers.id IN (select MAX(a2.id) from answers as a2 join users as u2 on u2.id = a2.user_id group by u2.id)');
})
->where('users.role_type_id', Users::STUDENT_ROLE_TYPE)->get();
答案 3 :(得分:0)
这里有2个表' articles
'和' comments
',其中 articles
是左表,而 comments
是有文章评论的右表。
我们想保留与 articles
一起加入的 comments
,但该加入应与 {{1} } 表。
comments
我从这里https://laravelcode.com/post/how-to-get-last-record-from-leftjoin-table-in-laravel
找到了这个解决方案