PHP, Laravel - Конкатенация со строкой в ​​модель - PullRequest
1 голос
/ 24 октября 2019

Возможно ли объединить строку в модель? Кажется, что ниже не работает.

У меня есть Car Model и Train Model. Транспортное средство будет либо Car, либо Train.

$vehicle = 'Car';
$result = $vehicle::where('model', $value)->count() > 0;

В приведенном выше коде существует следующая ошибка.

Symfony \ Component \ Debug \ Exception \ FatalThrowableError: Class 'Автомобиль не найден в файле

Как я могу объединить? Возможно ли это?

Ответы [ 5 ]

1 голос
/ 24 октября 2019
use App\Car; //place this at the top of your page. Make sure the model exists
0 голосов
/ 24 октября 2019

Я думаю, что это наиболее близко к тому, что вам нужно, вам не нужно ничего импортировать, поскольку у вас есть динамическое значение. (Если у вас есть 10 возможных моделей, вам придется импортировать все из них)

Так что вы должны сделать что-то вроде этого

$model = "Car";

$modelsPath = "\\App\\Models\\";

$className = $modelsPath.$model;

// if you need an instance you do this
// $instance = new $className;

$result = $className::where('model', $value)->count() > 0;

dd($result);

Что я обычно делаю, это создаю файл конфигурации, который содержитмассив всех возможностей, где они указывают тип (Car, Bus, Train in ur)

И затем я получаю значение, используя ключ, который является входом (car), и путь модели будет вконфиг! таким образом, вы можете легко поменять его позже и добавить больше условий, связанных с этим типом модели и т. д.

Надеюсь, это имеет смысл

С уважением

0 голосов
/ 24 октября 2019

Я думаю, что один подход может, как показано ниже:

$vehicle = Car::class; //this will dynamically add full namespace of Car class. 
$result = $vehicle::where('model', $value)->count() > 0;
0 голосов
/ 24 октября 2019

Это возможно

use App\Car;
use App\Train;

/* Here You can now set Model name dynamically*/

$vehicle = 'Car';
$result = $vehicle::where('model', $value)->count() > 0;
0 голосов
/ 24 октября 2019

Да, вы можете объединить модель в зависимости от условий. Ниже я добавил работоспособный код для реализации.

Импорт обеих моделей.

//use App\Car;
//use App\Train;

$isCar = true; // boolean condition to check whether it is a car or train
$classVariable = null;

if ($variable) {
    $classVariable = new Car();
}else{
    $classVariable = new Train();
}

$result = $classVariable->where('model', $value)->get();

//this will provide you a car model query
dd($result);

Лучший подход

Лучшим подходом будет использование модели транспортного средства и типа транспортного средства. Добавьте vehicle_type_id в таблицу транспортных средств.

Поэтому, когда вам нужно получить типы автомобилей, вы можете использовать

//Suppose vehicle_type_id for car is 1
$carVehicle = Vehicle::where('vehicle_type_id', 1)->get();
//Suppose vehicle_type_id for train is 2
$trainVehicle = Vehicle::where('vehicle_type_id', 2)->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...