Laravel 5 雄辩者有许多关系问题
我正在构建一个带有lumen微框架的API,使用Eloquent作为数据库 当我使用此代码从组中获取购物清单时,一切正常Laravel 5 雄辩者有许多关系问题,laravel-5,eloquent,relationships,lumen,Laravel 5,Eloquent,Relationships,Lumen,我正在构建一个带有lumen微框架的API,使用Eloquent作为数据库 当我使用此代码从组中获取购物清单时,一切正常 $group = Group::with(['shoppingLists' => function($query) { }])->get(); 它返回以下对象 { "id": "797799c2-6044-4a3a-a3a6-a71fbb17de68", "name": "'t snackske",
$group = Group::with(['shoppingLists' => function($query) {
}])->get();
它返回以下对象
{
"id": "797799c2-6044-4a3a-a3a6-a71fbb17de68",
"name": "'t snackske",
"description": "best group ever",
"user_id": "7e74223a-ea06-46bf-ab1a-abb01b287e32",
"created_at": "2015-08-09 20:06:40",
"updated_at": "2015-08-09 20:06:40",
"shopping_lists": [
{
"id": "2423eb3c-7dab-4672-b382-895788dec6a0",
"name": "shop",
"description": "food",
"user_id": "7e74223a-ea06-46bf-ab1a-abb01b287e32",
"group_id": "797799c2-6044-4a3a-a3a6-a71fbb17de68",
"created_at": "2015-08-09 20:06:40",
"updated_at": "2015-08-09 20:06:40"
}
]
}
当我检查记录的查询时,我得到以下查询:
{
"query": "select * from `groups`",
"bindings": [],
"time": 0.31
},
{
"query": "select * from `shopping_lists` where `shopping_lists`.`group_id` in (?)",
"bindings": [
"797799c2-6044-4a3a-a3a6-a71fbb17de68"
],
"time": 0.34
}
但当我尝试为ShoppingList选择特定字段时,此查询不会返回任何记录
查询生成器:
$group = Group::with(['shoppingLists' => function($query) {
$query->addSelect('id', 'name', 'description');
}])->get();
答复如下:
{
"id": "797799c2-6044-4a3a-a3a6-a71fbb17de68",
"name": "Group",
"description": "testgroup",
"user_id": "7e74223a-ea06-46bf-ab1a-abb01b287e32",
"created_at": "2015-08-09 20:06:40",
"updated_at": "2015-08-09 20:06:40",
"shopping_lists": []
}
来自getQueryLog函数的查询
{
"query": "select * from `groups`",
"bindings": [],
"time": 0.23
},
{
"query": "select `id`, `name`, `description` from `shopping_lists` where `shopping_lists`.`group_id` in (?)",
"bindings": [
"797799c2-6044-4a3a-a3a6-a71fbb17de68"
],
"time": 0.32
}
当我在mysql中复制并粘贴查询日志中的最后一个查询时,我得到了正确的行。由于某些原因,Elount没有显示购物清单中的数据
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Group extends Model
{
protected $increments = false;
protected $fillable = [
'id',
'name',
'description',
'user_id'
];
protected $primaryKey = 'id';
/**
* Get shoppinglists from this group
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function shoppingLists()
{
return $this->hasMany('App\ShoppingList', 'group_id', 'id');
}
}
您可能必须将外键列添加到addSelect()方法中,才能让Laravel发挥神奇的作用
Group::with(['shoppingLists' => function($query) {
$query->addSelect('id', 'group_id', 'name', 'description');
}])->get();
两个表共享相同的列名,因此可能需要在select语句中显式声明表名<代码>$query->addSelect('shoppingLists.id','shoppingLists.name','shoppingLists.description')
我曾尝试将其与“$query->addSelect('shopping\u lists.id')
一起使用,但没有成功。通常这不应该是问题,因为查询生成器中的with()
函数执行第二条语句@JeemusuYou可能必须将group\u id
列添加到addSelect()
方法才能实现外键约束。今晚我将尝试一下。目前无法访问我的计算机。提前谢谢