【问题标题】:Laravel: belongsTo not working when changing it's function nameLaravel:更改其函数名称时,belongsTo 不起作用
【发布时间】: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 名称时才会出现。

【问题讨论】:

    标签: php laravel eloquent relationship laravel-5


    【解决方案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');
          }
        

        【讨论】:

          猜你喜欢
          • 2023-03-19
          • 1970-01-01
          • 2019-04-11
          • 2016-07-25
          • 1970-01-01
          • 2021-03-19
          • 2015-08-26
          • 1970-01-01
          • 2017-06-26
          相关资源
          最近更新 更多