我正在编写一个程序,该程序在客户和关注点之间存在多对多关系。我已将模型配置为使用 Laravel 文档中概述的 belongsToMany()
函数。请参阅以下两个模型的代码:
客户端.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Client extends Model
{
use HasFactory;
protected $fillable = [
'first_name',
'last_name',
'email',
'preferred_day',
'preferred_time',
'presenting_concerns',
'is_active',
];
public function invoices() {
return $this->hasMany(Invoice::class);
}
public function concerns() {
return $this->belongsToMany(Concern::class);
}
}
关注.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Concern extends Model
{
use HasFactory;
protected $guarded = [
'concern',
];
public function clients() {
return $this->belongsToMany(Client::class);
}
}
我能够使用工厂和 php artisan tinker 创建一些示例数据。我现在正在建立我的观点。但是当我打电话
$clients = Client::all()->concerns()
在我的控制器中,我收到一条关注不存在的错误消息。我只在 Clients::all()
上做了一个 dd,我没有看到与返回的模型相关的问题。根据我的理解,只需调用 all() 函数,我只需返回客户端模型。但是,我希望通过调用关注()函数,我也能够返回关注。是否可以在一次通话中检索所有客户及其关注点?
请注意,我可以使用 Client::find(2)->concerns()
但这对我没有帮助,因为它只会返回 ID 为 2 的客户端的问题。
答案 0 :(得分:1)
是的,您可以这样做。您需要急切地加载您感兴趣的关系。
如果您执行以下操作,您将加载关系并在执行 dd()
时能够看到它。
$clients = Client::with('concerns')->get();