首页 > 解决方案 > Laravel Eloquent 模型与关系

问题描述

我已经在我的代码中实现了 eloquent 关系,但是 Laravel 无法读取我为映射模型中的 eloquent 关系而创建的函数。

用户模型

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

产品型号

public function users(){
        return $this->belongsTo(User::class);
    }

产品控制器

 $products = Product::with('Users')->Users()->where('users.isActive',1)->get();
        return view('product',compact('products'));

我不断从产品控制器收到错误,我还附上了我当前遇到的错误,如下所示。 在此处输入图像描述

如何使用 where 条件(例如“Users.isActive = 1”)获取所有产品和用户数据。

谢谢。

标签: phplaraveleloquenteloquent-relationship

解决方案


您可以使用whereHas从关系中过滤。

$products = Product::with('users')
    ->whereHas('users', function ($query) {
        $query->where('isActive', 1);
    })
    ->get();

此外,使用单数名词表示关系通常是一个好主意,belongsTo因为它返回一个对象,而不是一个集合。

public function user() {
    return $this->belongsTo(User::class);
}

$products = Product::with('user')
    ->whereHas('user', function ($query) {
        $query->where('isActive', 1);
    })
    ->get();

编辑

如果你想用产品检索用户,你应该使用用户模型进行查询。

$users = User::with('products')
    ->where('isActive', 1)
    ->get();

然后您可以通过以下方式检索用户和产品

foreach($users as $user) {
    $user->products;
    // or
    foreach($users->products as $product) {
        $product;
    }
}

推荐阅读