Я создаю API с микрофреймой просвета, используя Eloquent для базы данных.Eloquent hasmany issue issue
Когда я использую этот код, чтобы получить shoppinglists из группы, все работает
$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
}
Но когда я пытаюсь выбрать определенные поля для покупок списки этот запрос не возвращает никаких записей Построитель запросов:
$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 я получаю правильную строку. По какой-то причине красноречивый не показывает данные из shopping_lists.
<?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');
}
}
Такое же имя столбца разделяется обеими таблицами, поэтому вам может потребоваться явно указать имя таблицы в инструкции select. '$ query-> addSelect ('shoppingLists.id', 'shoppingLists.name', 'shoppingLists.description');' – Jeemusu
Я попытался использовать это с '' $ query-> addSelect ('shopping_lists.id') 'с нет успеха. И обычно это не должно быть проблемой, потому что функция '(()' в построителе запросов выполняет второй оператор. @Jeemusu –
Возможно, вам придется добавить столбец 'group_id' в метод' addSelect() 'для ограничения внешнего ключа. – Jeemusu