欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

laravel 中利用模型关联关系查询数据注意要点

程序员文章站 2022-04-14 07:52:59
...
laravel中,可以利用关联关系查找数据库的数据。

假设模型有产品,订单。一个产品会有多个订单。

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的数据。
这当然是非常不好的!

所以建议使用第一种,和第二种的方法。