Nik*_*aut 4 php laravel eloquent laravel-5
现状:我们正在创建新的数据库进行新的注册。
问题:如果在数据库迁移中进行了任何更改,我们需要对以前创建的数据库进行处理。或为每个先前创建的数据库运行该迁移。
如果我们为每个数据库运行迁移都没有问题。
问题:如何检查数据库表中有要在查询中应用条件的列。
当前,我需要先对第一行触发两个查询,并检查该列的存在,然后在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();
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以在一个查询中实现。还是有更好的方法呢?
感谢您的宝贵时间和建议。
whe*_*ker 13
在 5.8 中工作的更新解决方案
if ($object->getConnection()
->getSchemaBuilder()
->hasColumn($object->getTable(), 'column_name')) {
// required update here
}
Run Code Online (Sandbox Code Playgroud)
此解决方案只需要 $object 和 'column_name' 即可工作。连接名和表名是从对象本身派生的。
迟到了,但一个简单快捷的解决方案
if (Schema::hasColumn('flights', 'departure_time')){
// do something
}
Run Code Online (Sandbox Code Playgroud)
您可以执行以下操作以获取Column类的数组:
$columns = $model->getConnection()->getDoctrineSchemaManager()->getColumns();
Run Code Online (Sandbox Code Playgroud)
@DigitalDrifter提出了使用Schema类的想法,所以我只是这样尝试
我包括Schema课程
use Illuminate\Support\Facades\Schema;
Run Code Online (Sandbox Code Playgroud)
并通过使用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();
Run Code Online (Sandbox Code Playgroud)