0

我只是从 ORM 开始。我有个问题,这是我的表——

表 a - (aid, aname, atag);

表 b -(出价,援助,bname,..);

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

所以我正在尝试这段代码,在我想要的输出中 - (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)

4

1 回答 1

0

您应该注意的几件事:

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

  2. 您不能将belongsToMany关系与 s 以外的任何东西混合和匹配belongsToMany。AbelongsToMany专门用于您有两个通过数据透视表连接的表的情况。在你的情况下,B belongsToA 和 A hasManyB。

于 2013-08-16T20:57:45.490 回答