![](/img/trans.png)
[英]Check if model exist and continue routing if not found in Laravel
[英]Check if column exist in Laravel model's table and then apply condition
当前情况:我们正在为新注册创建新数据库。
问题:如果在数据库迁移中进行了任何更改,我们需要为以前创建的数据库处理它。 或者为每个以前创建的数据库运行该迁移。
如果我们为每个数据库运行迁移没问题。
问题:如何检查数据库表是否有我们在查询中应用条件的列。
目前我需要首先为第一行触发两个查询并检查该列是否存在,然后在 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();
}
有什么办法可以在一个查询中实现。 或者有什么更好的方法来做到这一点?
感谢您的时间和建议。
@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();
在 5.8 中工作的更新解决方案
if ($object->getConnection()
->getSchemaBuilder()
->hasColumn($object->getTable(), 'column_name')) {
// required update here
}
此解决方案只需要 $object 和 'column_name' 即可工作。 连接名和表名是从对象本身派生的。
您可以执行以下操作来获取 Column 类的数组:
$columns = $model->getConnection()->getDoctrineSchemaManager()->getColumns();
迟到了,但一个简单快捷的解决方案
if (Schema::hasColumn('flights', 'departure_time')){
// do something
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.