Текущая ситуация: Мы создаем новую базу данных для новой регистрации.
Проблема: Если при миграции базы данных были внесены какие-либо изменения, нам необходимо обработать их для ранее созданной базы данных. Или запустите эту миграцию для каждой ранее созданной базы данных.
Если мы запустим миграцию для каждой базы данных, проблем не возникнет.
Вопрос: как проверить, что в таблице базы данных есть столбец, для которого мы применяем условие в запросе.
В настоящее время мне нужно сначала запустить два запроса для первой строки и проверить существование этого столбца, а затем применить условие в предложении where. как показано ниже
$firstRow = Model::first();
if (isset($firstRow->is_splited)){
$records = Model::where('is_splited',0)->get(); // this will give error if I don't check column existence for previously created database.
}else{
$records = Model::all();
}
Есть ли способ добиться в одном запросе. Или какой-нибудь лучший способ сделать это?
Спасибо за ваше время и предложение.






Вы можете сделать следующее, чтобы получить массив классов Column:
$columns = $model->getConnection()->getDoctrineSchemaManager()->getColumns();
Также есть getColumnListing и hasColumn.
Я знаю, что он не полный, но мне очень помог. Теперь я могу использовать in_array('col_name',$columns)
@DigitalDrifter Call to undefined method Doctrine\DBAL\Schema\MySQLSchemaManager::getColumns()
@DigitalDrifter дал идею использовать класс Schema, поэтому я просто попробовал вот так
Я включаю класс Schema
use Illuminate\Support\Facades\Schema;
И проверьте столбец с помощью класса Schema, и он также работает
$isColExist = Schema::connection("connection_name")->hasColumn('table_name','is_splited');
$q = Acquire::with("block");
if ($isColExist){
$q->where('is_splited',0);
}
$records = $q->get();
@pankajkumar: Дханбад, я имею в виду Дханьявада :)
ха-ха-ха, Дханбад не ошибся .. Я из Дханбад-Джаркханда. Никеш Джи, я хочу к тебе присоединиться. пожалуйста, отправьте свою почту или Wtsup для обмена технологиями. Я работаю над концепцией Multiple Vendor Auth в Laravel. так что я думаю, вы можете мне помочь. Модель уже разработана и используется в проекте. но я хочу улучшить это. так я говорю. отправьте свою почту в [email protected]. @ Никлеш, откуда ты?
Обновленное решение, работающее в 5.8
if ($object->getConnection()
->getSchemaBuilder()
->hasColumn($object->getTable(), 'column_name')) {
// required update here
}
Это решение требует для работы только $ object и 'column_name'. Имена соединений и таблиц являются производными от самого объекта.
Этот сработал для меня, не импортируя ничего.
Поздно, но простое и быстрое решение
if (Schema::hasColumn('flights', 'departure_time')){
// do something
}
Ух ты дал идею.