如何加载与 Eloquent 的关系?
How to load relationship with Eloquent?
我有一个Link模型,每个link都有一个owner(在DB中用ownerId表示,是Usertable的外键)。
这是 Link 模型:
<?php namespace App\Http\Models;
use Illuminate\Database\Eloquent\Model;
class Link extends Model {
protected $table = "Link";
// ...
// Relationships
public function owner()
{
return $this->belongsTo(User::class, 'ownerId', 'id');
}
}
当我在 Link 控制器中使用 $data = Link::find($linkId)->toJson();
时,包含所有者但在 JSON 数据中为空。我也尝试了 $data = Link::with('owner')->find($linkId)->toJson();
和 $data = Link::find($linkId)->load('owner')->toJson();
当我使用 $data = Link::find($linkId)->owner->toJson();
时,我得到了用户数据。我的代码中是否缺少某些内容?
有没有办法在 link 对象中加载所有者并通过 JSON 获取它而不需要额外的请求/步骤?
$data = Link::with('owner')->find($linkId)->get();
我终于找到问题了。我的用户 table 中的主键不是标准的(它是一个字符串键而不是 int)。
我在我的用户模型中添加了以下几行:
public $incrementing = false;
public $keyType = 'string';
现在 $data = Link::with('owner')->find($linkId);
一切正常。
我有一个Link模型,每个link都有一个owner(在DB中用ownerId表示,是Usertable的外键)。
这是 Link 模型:
<?php namespace App\Http\Models;
use Illuminate\Database\Eloquent\Model;
class Link extends Model {
protected $table = "Link";
// ...
// Relationships
public function owner()
{
return $this->belongsTo(User::class, 'ownerId', 'id');
}
}
当我在 Link 控制器中使用 $data = Link::find($linkId)->toJson();
时,包含所有者但在 JSON 数据中为空。我也尝试了 $data = Link::with('owner')->find($linkId)->toJson();
和 $data = Link::find($linkId)->load('owner')->toJson();
当我使用 $data = Link::find($linkId)->owner->toJson();
时,我得到了用户数据。我的代码中是否缺少某些内容?
有没有办法在 link 对象中加载所有者并通过 JSON 获取它而不需要额外的请求/步骤?
$data = Link::with('owner')->find($linkId)->get();
我终于找到问题了。我的用户 table 中的主键不是标准的(它是一个字符串键而不是 int)。 我在我的用户模型中添加了以下几行:
public $incrementing = false;
public $keyType = 'string';
现在 $data = Link::with('owner')->find($linkId);
一切正常。