Красноречивый запрос с использованием Dynami c Модель Laravel - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть этот код, который я использую для создания динамической c модели в laravel

use Jenssegers\Mongodb\Eloquent\Model as Eloquent;

class CRUD extends Eloquent
{   
    public $collection ;

    function __construct($attributes = [],$collection ="" )
    {  
        parent::__construct($attributes);

  $this->collection = $collection;

    }

}

, и я вызываю этот класс, используя этот код

     $table='HW12345' ;
     $device_model = new CRUD([],$table);
     $device_model::limit(10)->get();

, но этот код возвращает пустой массив. если я помещу этот код в конструктор

echo $collection

, он выведет правильное значение

HW12345

, что означает, что модель получит значение переданной переменной .

если я заменил код

$ this-> collection = $ collection;

на

$ this-> collection = 'HW12345';

работает без проблем и возвращает данные из коллекции HW12345, что не так и почему это происходит

1 Ответ

0 голосов
/ 26 февраля 2020

$collection является защищенным свойством.

Вам не нужно это объявление в вашей модели:

public $collection ;

И я бы также установил значение коллекции перед вызовом родительского конструктора.

function __construct($attributes = [], $collection = "")
    {  
        $this->collection = $collection;
        parent::__construct($attributes);
    }

Потому что обычно защищенные свойства объявляются до того, как произойдет любая конструкция.

Также очень странно использовать Eloquent таким образом. Вы удаляете большую часть его статических c и интеллектуальных функций, не объявляя свои модели раньше времени.

Пример: Вы не можете делать:

$results = Model::where('field', 'value')->get();

$newRecord = Model::create([values...]);

et c.

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