Laravel - 使用所有函数检索关联模型

时间:2021-06-27 23:11:29

标签: php laravel

我正在编写一个程序,该程序在客户和关注点之间存在多对多关系。我已将模型配置为使用 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 的客户端的问题。

1 个答案:

答案 0 :(得分:1)

是的,您可以这样做。您需要急切地加载您感兴趣的关系。

如果您执行以下操作,您将加载关系并在执行 dd() 时能够看到它。

$clients = Client::with('concerns')->get();
相关问题