雄辩的 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
关系与belongsToMany
s 以外的任何关系混合和匹配。 belongsToMany
专门用于您有两个通过数据透视表连接的表的情况。在你的情况下,B belongsTo
A 和 A hasMany
B。
【讨论】:
您好,我已经编辑了我的帖子..我仍然无法访问表 A 中的 aname 列..我已经完成了您建议的所有更改.. 正如我所提到的,A
属于 B
,而不是您在编辑中拥有的其他方式。 brelation() 应该是$this->hasMany('B', 'aid')
。 arelation() 应该是$this->belongsTo('A', 'aid')
。以上是关于雄辩的 ORM 查询——新手的主要内容,如果未能解决你的问题,请参考以下文章
我可以在一个地方(一个模型)使用雄辩的ORM和查询生成器吗?