雄辩的-渴望的加载关系 [英] Eloquent - Eager Loading Relationship

查看:85
本文介绍了雄辩的-渴望的加载关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图弄清楚如何从相关表中加载数据.我有2个型号GroupGroupTextPost.

I'm trying to figure out how to eager load data from a related table. I have 2 models Group and GroupTextPost.

Group.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Group extends Model
{
    protected $table = 'group';

    public function type()
    {
        return $this->hasOne('\App\Models\GroupType');
    }

    public function user()
    {
        return $this->belongsTo('\App\Models\User');
    }

    public function messages()
    {
        return $this->hasMany('\App\Models\GroupTextPost');
    }
}

GroupTextPost.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class GroupTextPost extends Model
{
    protected $table = 'group_text_post';

    public function user()
    {
        return $this->belongsTo('\App\Models\User');
    }

    public function group()
    {
        return $this->belongsTo('\App\Models\Group');
    }
}

我要做的是在获取组文本帖子时急于加载user,以便在提取消息时包括用户名.

What I'm trying to do is eager load the user when fetching group text posts so that when I pull the messages the user's name is included.

我已经尝试过这样做:

public function messages()
{
    return $this->hasMany('\App\Models\GroupTextPost')->with('user');
}

...并这样打电话:

... and calling like so:

$group = Group::find($groupID);
$group->messages[0]->firstname

但是我得到一个错误:

Unhandled Exception: Call to undefined method Illuminate\Database\Query\Builder::firstname()

这与雄辩有关系吗?

推荐答案

您不应急于直接加载该关系.您可能希望始终将用户加载到GroupTextPost模型上.

You should not eager load directly on the relationship. You could eager load the user always on the GroupTextPost model.

GroupTextPost.php

GroupTextPost.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class GroupTextPost extends Model
{
    protected $table = 'group_text_post';

    /**
     * The relations to eager load on every query.
     *
     * @var array
     */
    protected $with = ['user'];

    public function user()
    {
        return $this->belongsTo('\App\Models\User');
    }

    public function group()
    {
        return $this->belongsTo('\App\Models\Group');
    }
}

或者您可以使用嵌套的渴望加载

$group = Group::with(['messages.user'])->find($groupID);
$group->messages[0]->user->firstname

这篇关于雄辩的-渴望的加载关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆