雄辩的 ORM 查询——新手

Posted

技术标签:

【中文标题】雄辩的 ORM 查询——新手【英文标题】:Eloquent ORM query -- newbie 【发布时间】:2013-08-19 08:46:31 【问题描述】:

我刚开始使用 ORM。我有一个问题,这是我的表--

table a - (aid, aname, atag);

table b - (bid,aid, bname, ..);

这是一对多的关系 - 即一个 aid 可以属于多个 bid 但一个 bid 只能属于一个 援助

所以我正在尝试这段代码,在输出中我想要 - (bname,aname) 用于所有记录。

一个模型--

class A extends Eloquent 
   protected $table = 'a';
   protected $primaryKey = 'aid';
   public function brelation() 
       $this->belongsToMany('B','aid');
   

B型--

class B extends Eloquent 
   protected $table = 'b';
   protected $primaryKey = 'bid';
   public function getANames() 
       $this->hasOne('A','aid');
   

在控制器中--

 foreach(B::with('getANames')->get() as $b_item)
      echo $b_item->bname." , ".$b_item->aname;
 

需要澄清的几点--

1) 我必须指定外键以确保它们映射。因为在我的实际情况下,它们的名称不同。

2) 我正在使用 Laravel 4。

谁能告诉我我做错了什么以及如何获得想要的结果。

===== 更新=====

 class A extends Eloquent 
   protected $table = 'a';
   protected $primaryKey = 'aid';
   public function brelation() 
       $this->belongsTo('B','aid');
   
 

我仍然无法访问控制器中的 aname 列,即 ($b_item->aname)

【问题讨论】:

【参考方案1】:

您应该注意的几件事:

    如果您有自定义主键,则需要将 eloquent 模型上的 $primaryKey 属性设置为数据库中的主键。

    您不能将belongsToMany 关系与belongsToManys 以外的任何关系混合和匹配。 belongsToMany 专门用于您有两个通过数据透视表连接的表的情况。在你的情况下,B belongsTo A 和 A hasMany B。

【讨论】:

您好,我已经编辑了我的帖子..我仍然无法访问表 A 中的 aname 列..我已经完成了您建议的所有更改.. 正如我所提到的,A 属于 B,而不是您在编辑中拥有的其他方式。 brelation() 应该是$this->hasMany('B', 'aid')。 arelation() 应该是$this->belongsTo('A', 'aid')

以上是关于雄辩的 ORM 查询——新手的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 雄辩的 ORM 关系查询

Laravel 雄辩的一对一通过(级别/树)关系

雄辩的 ORM 查询仅返回在其集合中具有特定模型的模型

我可以在一个地方(一个模型)使用雄辩的ORM和查询生成器吗?

laravel 4 - 如何限制(采取和跳过)雄辩的 ORM?

Laravel 雄辩的 ORM 群在哪里