Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 21.12.2019 18:22:46

Не работает отношения hasMany

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)

Не в сети

#2 23.12.2019 09:32:45

Alexsaab
Откуда: Москва
Сообщений: 92

Re: Не работает отношения hasMany

привет,
Ну пропишите
return $this->hasMany(CheckListVariable::class);
полностью отношение, типа

return $this->hasMany(CheckListVariable::class, 'key1', 'key2');

Ну key1 и key2 это ваши ключи, не хотел лезть в код и смотреть.

с ув., Алексей

Не в сети

#3 23.12.2019 10:29:58

Re: Не работает отношения hasMany

Спасибо.
Пробовал

    /**
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function check_list_variables()
    {
        return $this->hasMany(CheckListVariable::class,'check_list_question_id','id');
    }

Результат тот же. Какие ещё могут быть варианты?

Не в сети

#4 23.12.2019 11:42:39

Re: Не работает отношения hasMany

Разобрался.
Оказывается в выборку достаточно добавить поле, по которому идёт связка таблиц
http://prntscr.com/qel0t1

Не в сети

Подвал раздела