php - Laravel Eloquent 多重连接

标签 php mysql laravel eloquent

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

商店

  • 店铺编号
  • 姓名
  • 描述

商店地址

  • 店铺编号
  • 街道
  • 压缩
  • 城市编号

城市

  • 城市编号
  • 姓名

我已经设法加载所有商店的地址,但我在按城市 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 从城市表中获取城市名称,我找不到这方面的示例。

谢谢。

最佳答案

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

你需要这样的东西:

class StoreAddress extends Eloquent
{

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

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

}

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

关于php - Laravel Eloquent 多重连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29502035/

相关文章:

php - 修复 undefined index

php - 在 PHP/MySQL 中转义单引号插入不起作用

javascript - 如何防止月份在使用 php 数据的 javascript 图表中重复出现?

Laravel 5.4 - Mix - 如何运行浏览器实时重新加载

javascript - 如果选择下拉选项,则获取数据并填充到文本框中

php - 使用 Redis 的 Laravel 缓存 - 这个键是什么意思?

php - Bootbox.js 提交表单前确认选择

php - file_get_contents(): SSL 操作失败,代码为 1。OpenSSL 错误消息:错误:0A000126:SSL 例程::读取时出现意外的 eof

MySQL FIND_IN_SET 不返回中间元素的数据

php - 无法从站点的子目录加载 MYSQL 驱动程序,可以从主目录加载