【问题标题】:Laravel 4.2 Eloquent Relationship with custom table nameLaravel 4.2 具有自定义表名的雄辩关系
【发布时间】:2014-08-08 19:57:53
【问题描述】:

我试图通过$post->file->url 访问文件表上的 url 属性,但我得到 “尝试获取非对象的属性” 错误。我的表和模型不同,因为我不能使用 File 作为模型名称。有什么遗漏吗?我希望有人提出解决方案。这是我的桌子:

- posts:
 [PK] id 
      title
 [FK] featured_image 

 - files:
 [PK] id                
      title
      url

我的模特:

class TheFile extends \Eloquent 
{
   protected $table = 'files';

   public function post() {
     return $this->belongsTo('Post');
   }
}


class Post extends \Eloquent 
{   
  protected $table = 'posts';

  public function file() {
    return $this->hasOne('TheFile', 'id', 'featured_image');   
  }
}

提前致谢。

【问题讨论】:

    标签: php laravel orm laravel-4 eloquent


    【解决方案1】:

    也许我错了,但在我看来,你实际上在这里的关系是错误的。如果表X 有一个表Y,则FK 字段位于Y 上,并且与X 上的PK 相关。但是你有相反的方式。

    因此,您需要做以下两件事之一:

    1. 将您的数据库更改为将post_id 放在files 上,而不是将featured_image(指向file`.`id)放在posts 上

    2. 更改您的关系以匹配您的数据库结构:

      class TheFile extends \Eloquent
      {
          protected $table = 'files';
      
          public function post() {
              return $this->hasOne('Post');
          }
      }
      
      
      class Post extends \Eloquent
      {
          protected $table = 'posts';
      
          public function file() {
              return $this->belongsTo('TheFile');
          }
      }
      

      如果您不打算更改表格,显然您的各种字段也会更改。


    基本的经验法则是,如果一个表有 FK,那么它就是“属于”表。另一个表是“有一个”或“有很多”。这条规则的轻微例外显然是“属于许多”,其中一个表可以与另一个没有 FK 的表相关 - 但即使这是同一规则的专用版本 - X '有很多' X_Ys 和 @ 987654333@ '有很多' X_Ys 和 X_Y 属于 X 和 X_Y 属于 Y。所以它真的只是语法糖。

    【讨论】:

    • 我觉得你的回答是对的。我将belongsTo() 放入Post 并将hasMany() 放入TheFile。但仍然无法正常工作。可能是因为表名和模型名不匹配。
    【解决方案2】:

    我将表名更改为 medias,将模型更改为 Media。然后将这些代码放入Post model 中。其作品。表、模型和方法的名称必须相似。

    public function media() {
        return $this->belongsTo('Media', 'featured_image', 'id');
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      • 2016-09-06
      • 2022-06-11
      相关资源
      最近更新 更多