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-&gt;artist 完全没有问题

但如果我在 Album 类中更改函数名称而不更改模型/类名:

public function artistInfo()

  return $this->belongsTo('App\Artist');

那么,这将不起作用:$album-&gt;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-&gt;artistInfoAlbum::find(1)-&gt;artistInfo-&gt;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 中的状态名称更改颜色

如何对 laravel 表单请求提出条件

Laravel 和 Livewire:组件更改时如何执行 javascript 函数?

如何在 Laravel Eager Loading Array 中使用别名而不更改方法名称

Laravel ORM 友谊关系不重复

[PHP] 自定义 laravel/passport 的误区讲解