Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Laravel Framework 6.9.0
PHP 7.3.7
Добрый вечер.
Возникли сложности с выборкой с помощью отношения hasMany.
Есть 2 таблицы:
check_list_variables (Переменные чек листа)
http://prntscr.com/qdzlkw
check_list_questions (Вопросы чек листа)
http://prntscr.com/qdzm6f
1 Вопрос чек листа имеет несколько Переменных чек листа
Модель CheckListQuestion
/**
* @return Model|static
*/
public static function list($data)
{
$colums = array(
'id',
'check_list_question',
'check_list_id',
'weight',
'sort'
);
$check_list_question = CheckListQuestion::select($colums)
->with(
'check_list:id,check_list',
'check_list_variables:id'
)
->orderBy('check_list_question', 'asc')
->filter($data)
->get();
return $check_list_question;
}
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function check_list()
{
return $this->belongsTo(CheckList::class);
}
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function check_list_variables()
{
return $this->hasMany(CheckListVariable::class);
}
Модель CheckListVariable
/**
* @return Model|static
*/
public static function list($data)
{
$colums = array('id',
'check_list_variable',
'check_list_id',
'journal_variable_type_id',
'values',
'object_id',
'check_list_question_id'
);
$check_list_variable = CheckListVariable::select($colums)
->with([
'check_list_question:id,check_list_question',
'check_list:id,check_list',
'journal_variable_type:id,journal_variable_type',
'object:id,object'
])
->filter($data)
->orderBy('check_list_variable', 'asc')
->get();
return $check_list_variable;
}
/**
* @param int $journal_id
* @return mixed
*/
public static function getCheckListId($check_list_id)
{
$check_list_variable = CheckListVariable::where('check_list_id', $check_list_id)
->pluck('id');
return $check_list_variable->toArray();
}
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function check_list()
{
return $this->belongsTo(CheckList::class);
}
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function journal_variable_type()
{
return $this->belongsTo(JournalVariableType::class);
}
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function object()
{
return $this->belongsTo(Objects::class);
}
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function check_list_question()
{
return $this->belongsTo(CheckListQuestion::class);
}
В итоге получаю следующие данные:
check_list_question:
[
{
"id": 1,
"check_list_question": "11",
"check_list_id": 2,
"weight": null,
"sort": null,
"check_list": {
"id": 2,
"check_list": "Название чек-листа"
},
"check_list_variables": []
},
{
"id": 2,
"check_list_question": "22",
"check_list_id": 2,
"weight": null,
"sort": null,
"check_list": {
"id": 2,
"check_list": "Название чек-листа"
},
"check_list_variables": []
},
{
"id": 3,
"check_list_question": "33",
"check_list_id": 2,
"weight": null,
"sort": null,
"check_list": {
"id": 2,
"check_list": "Название чек-листа"
},
"check_list_variables": []
},
{
"id": 4,
"check_list_question": "44",
"check_list_id": 2,
"weight": null,
"sort": null,
"check_list": {
"id": 2,
"check_list": "Название чек-листа"
},
"check_list_variables": []
},
{
"id": 5,
"check_list_question": "55",
"check_list_id": 2,
"weight": null,
"sort": null,
"check_list": {
"id": 2,
"check_list": "Название чек-листа"
},
"check_list_variables": []
}
]
check_list_variables
[
{
"id": 1,
"check_list_variable": "q1",
"check_list_id": 2,
"journal_variable_type_id": 1,
"values": null,
"object_id": 1,
"check_list_question_id": 1,
"check_list_question": {
"id": 1,
"check_list_question": "11"
},
"check_list": {
"id": 2,
"check_list": "Название чек-листа"
},
"journal_variable_type": {
"id": 1,
"journal_variable_type": "checkbox"
},
"object": {
"id": 1,
"object": "Объект"
}
},
{
"id": 2,
"check_list_variable": "q2",
"check_list_id": 2,
"journal_variable_type_id": 1,
"values": null,
"object_id": 1,
"check_list_question_id": 1,
"check_list_question": {
"id": 1,
"check_list_question": "11"
},
"check_list": {
"id": 2,
"check_list": "Название чек-листа"
},
"journal_variable_type": {
"id": 1,
"journal_variable_type": "checkbox"
},
"object": {
"id": 1,
"object": "Объект"
}
}
]
Проблема состоит в том, что всегда возвращается пустой массив переменных (не работает связь hasMany)
http://prntscr.com/qdzpsz
Хотя обратная связь работает
http://prntscr.com/qdzrau
Заранее спасибо
Изменено Vladimir_user (21.12.2019 18:23:17)
Не в сети
привет,
Ну пропишите
return $this->hasMany(CheckListVariable::class);
полностью отношение, типа
return $this->hasMany(CheckListVariable::class, 'key1', 'key2');
Ну key1 и key2 это ваши ключи, не хотел лезть в код и смотреть.
с ув., Алексей
Не в сети
Спасибо.
Пробовал
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function check_list_variables()
{
return $this->hasMany(CheckListVariable::class,'check_list_question_id','id');
}
Результат тот же. Какие ещё могут быть варианты?
Не в сети
Разобрался.
Оказывается в выборку достаточно добавить поле, по которому идёт связка таблиц
http://prntscr.com/qel0t1
Не в сети
Страницы 1