laravel 中利用模型关联关系查询数据注意要点
程序员文章站
2022-04-14 07:52:59
...
laravel中,可以利用关联关系查找数据库的数据。
假设模型有产品,订单。一个产品会有多个订单。
现在我要查询产品id为2 的订单里id大于10的订单
以下有3种方式。
这里的重点是第3句,实际的sql语句如下:
SELECT * FROM `order_no` WHERE `order_no`.`category` = '2' and `order_no`.`category` IS not NULL
也就是框架先查出所有的订单放到内存,然后在内存中筛选出id大于10的数据。
这当然是非常不好的!
所以建议使用第一种,和第二种的方法。
假设模型有产品,订单。一个产品会有多个订单。
class OrderNo extends Model { /** * 获取关联 */ public function product() { return $this->belongsTo('App\Models\Product', 'category', 'id'); } } class Product extends Model { // 一个产品有多个订单。 public function orders(){ return $this->hasMany('App\Models\OrderNo','category','id'); } }
现在我要查询产品id为2 的订单里id大于10的订单
以下有3种方式。
$list1 = Product::find( 2 )->orders()->where( 'id', '>', 10 )->get(); $list2 = OrderNo::query()->where( "category", 2 )->where( 'id', '>', 10 )->get(); $list3 = Product::find( 2 )->orders->where( 'id', '>', 10 );
这里的重点是第3句,实际的sql语句如下:
SELECT * FROM `order_no` WHERE `order_no`.`category` = '2' and `order_no`.`category` IS not NULL
也就是框架先查出所有的订单放到内存,然后在内存中筛选出id大于10的数据。
这当然是非常不好的!
所以建议使用第一种,和第二种的方法。