Laravel:更改其函数名称时,belongsTo 不起作用
Posted
技术标签:
【中文标题】Laravel:更改其函数名称时,belongsTo 不起作用【英文标题】:Laravel: belongsTo not working when changing it's function name 【发布时间】:2015-06-12 15:35:33 【问题描述】:我有这个关系Artist - has many - Album
艺术家类:
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Artist extends Model
public function albums()
return $this->hasMany('App\Album');
专辑类:
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Album extends Model
public function artist()
return $this->belongsTo('App/Artist');
如果我这样做:$album->artist
完全没有问题
但如果我在 Album 类中更改函数名称而不更改模型/类名:
public function artistInfo()
return $this->belongsTo('App\Artist');
那么,这将不起作用:$album->artistInfo
。它为我返回null
附:这不是我真正的架构,但问题仅在我更改函数的 belongsTo 名称时才会出现。
【问题讨论】:
【参考方案1】:嗯,我找到了正确的答案,结果证明这很容易。
在关系函数中指定键(外键和本地键)。对于这个例子:
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Album extends Model
public function artistInfo()
return $this->belongsTo('App/Artist','artist_id','id');
现在您可以照常进行操作了:$artist->artistInfo
或 Album::find(1)->artistInfo->name
【讨论】:
单独添加外键参数就足以解决问题,除非您的主键名称不是“id”。【参考方案2】:Eloquent,Laravel 中使用的 ORM 旨在基于模型,并给出真实世界的对象定义。因此,根据我的经验,不可能改变这些。
【讨论】:
【参考方案3】:我会接受上面的答案(?),但你可以做我相信你问的事情
Album.php
public static function getAlbum($id)
return static::with(['artistInfo'])->find($id);
public function artistInfo()
return $this->belongsTo('App\Artist');
在AlbumController.php
use App\Album;
public function single($id)
$album = Album::getAlbum($id);
return $album->artistInfo;
希望这会有所帮助。至少,您是否检查了任何 with()
语句以了解适当的名称更改?
【讨论】:
【参考方案4】:使用您的函数的任何名称。只需在此表中添加该模型(表)的关系 attribute name
的附加值。
public function artistInfo()
return $this->belongsTo(Artist::class,'artist_id');
【讨论】:
以上是关于Laravel:更改其函数名称时,belongsTo 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 和 Livewire:组件更改时如何执行 javascript 函数?