Laravel:属于更改它的功能名称时不工作

时间:2015-04-07 21:34:54

标签: php laravel eloquent relationship laravel-5

我有这种关系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

P.S。这不是我真正的架构,但问题只出现在我更改belongsTo的函数名称时。

4 个答案:

答案 0 :(得分:7)

好吧,我找到了正确的答案,结果发现它很简单。

在关系函数中指定键(外键和本地键)。对于这个例子:

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Album extends Model {

  public function artistInfo()
  {
    return $this->belongsTo('App/Artist','artist_id','id');
  }

}

现在您可以照常执行此操作:$artist->artistInfoAlbum::find(1)->artistInfo->name

答案 1 :(得分:0)

Eloquent,Laravel中使用的ORM设计为基于模型,并提供真实世界的对象定义。因此,根据我的经验,不可能改变这些。

答案 2 :(得分:0)

我会采取上面的答案(?),但你可以做我相信你问的问题

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()语句以进行相应的名称更改?

答案 3 :(得分:0)

使用函数的任何名称。只需在表中添加该模型(表)的关系attribute name的附加值即可。

 public function artistInfo()
  {
    return $this->belongsTo(Artist::class,'artist_id');
  }