gpt4 book ai didi

php - Eloquent - 急切加载关系

转载 作者:可可西里 更新时间:2023-11-01 00:08:19 26 4
gpt4 key购买 nike

我正在尝试弄清楚如何从相关表中预先加载数据。我有 2 个模型 GroupGroupTextPost

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');
}
}

我想做的是在获取组文本帖子时预先加载用户,这样当我拉取消息时用户名就包含在内。

我试过这样做:

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

...然后像这样调用:

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

但是我得到一个错误:

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

这可能与 Eloquent 相关吗?

最佳答案

你不应该直接在关系上急切加载。您可以始终在 GroupTextPost 模型上预先加载用户。

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');
}
}

或者您可以使用 Nested Eager Loading

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

关于php - Eloquent - 急切加载关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41160888/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com