Объект Eloquent Model снова вызывает конструктор при вызове метода get - PullRequest
0 голосов
/ 08 ноября 2019

Я знаю, что конструктор объекта вызывается только в первый раз, когда он создается.

Но в моем случае после использования xDebug для исследования я обнаружил, что, несмотря на успешный вызов с $blockIdпараметр, когда он был создан, когда я вызываю метод get() для получения данных, конструктор снова вызывается, и на этот раз параметр $blockId является просто пустым массивом, поэтому он вызывает ошибки.

Я пробую другой случай с count() методом, он работает как шарм.

Вот код, который я упомянул выше:

$userData = new UserData($blockId);
$results= $userData ->whereIn('Type', request('user_types'))->get(); //causes error
$results1= $userData ->whereIn('Type', request('user_types'))->count(); //works like a charm

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class UserData extends Model
{
    const TABLE_NAME  = 'user_';

    protected $table = self::TABLE_NAME;
    public $timestamps = false;
    protected $guarded = [];

    public function __construct($blockId)
    {
        parent::__construct();
        $this->table .= $blockId;
    }
}

Я надеюсь, вы могли бы помочь мне узнатьв чем причинаЗаранее спасибо.

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

Это не сработает.
При запросе существующей модели, под капотом есть (new static)->newQuery() вызов , поэтому ваши данные будут потеряны. Вы должны переосмыслить свой поток.

0 голосов
/ 08 ноября 2019

Метод get () возвращает массив моделей. Это означает, что конструкторы вызываются для каждой возвращаемой строки базы данных. Установите $ blockId в качестве необязательного параметра или используйте атрибут данных с проверкой существования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...