Laravel Eloquent多次加入

时间:2015-04-07 21:53:20

标签: php mysql laravel eloquent

我试图从数据库加载所有商店,包括商店地址和城市详细信息。

存储

  • STORE_ID
  • 姓名
  • 描述

store_address

  • STORE_ID
  • 拉链
  • city_id

城市

  • city_id
  • 名称

我已设法加载所有带地址的商店,但我在按城市ID加载城市名称时遇到问题。

这就是我目前所得到的:

{
   "store_id":1,
   "name":"Store Name",
   "description":"Store description",
   "created_at":"-0001-11-30 00:00:00",
   "updated_at":"-0001-11-30 00:00:00",
   "address":{
      "store_id":1,
      "street":"Street name",
      "zip":00000,
      "city_id":1
   }
}

我的代码:

$stores = Store::with('address')->get();

class Store extends Eloquent
{

    protected $table = 'stores';
    protected $primaryKey = 'store_id';

    public function address(){
        return $this->hasOne('StoreAddress', 'store_id');
    }
}

class StoreAddress extends Eloquent
{

    protected $table = 'store_address';
    protected $primaryKey = 'store_id';

}

所以我只需要通过city_id从城市表中获取城市名称,我找不到这个我想要做的例子。

感谢。

1 个答案:

答案 0 :(得分:4)

您应该在belongsTo模型中创建StoreAddress城市关系。

你需要这样的东西:

class StoreAddress extends Eloquent
{

    protected $table = 'store_address';
    protected $primaryKey = 'store_id';

    public function city()
    {
        return $this->belongsTo('City', 'city_id');
    }

}

当然,你需要为这个城市创建一个模型(如果你还没有这样做的话)。