Php 检查Laravel模型中是否存在列';s表,然后应用条件
当前情况:我们正在为新注册创建新数据库 问题:如果数据库迁移中发生任何更改,我们需要为以前创建的数据库处理。或者为以前创建的每个数据库运行该迁移 如果我们为每个数据库运行迁移,就不会有问题 问题:如何检查数据库表中我们在查询中应用条件的列 目前,我需要首先对第一行启动两个查询,检查该列是否存在,然后在where子句中应用条件。如下Php 检查Laravel模型中是否存在列';s表,然后应用条件,php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,当前情况:我们正在为新注册创建新数据库 问题:如果数据库迁移中发生任何更改,我们需要为以前创建的数据库处理。或者为以前创建的每个数据库运行该迁移 如果我们为每个数据库运行迁移,就不会有问题 问题:如何检查数据库表中我们在查询中应用条件的列 目前,我需要首先对第一行启动两个查询,检查该列是否存在,然后在where子句中应用条件。如下 $firstRow = Model::first(); if(isset($firstRow->is_splited)){ $records = Mod
$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();
}
是否有任何方法可以在一个查询中实现。或者有更好的方法吗
感谢您的时间和建议。您可以执行以下操作以获得列类数组:
$columns = $model->getConnection()->getDoctrineSchemaManager()->getColumns();
还有和。@digitaldriver提出了使用
Schema
类的想法,所以我就这样尝试了
我包括Schema
class
use Illuminate\Support\Facades\Schema;
并使用Schema
class检查列,它也可以工作
$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”即可工作。连接和表名是从对象本身派生的。这里的后面是一个简单而快速的解决方案
if (Schema::hasColumn('flights', 'departure_time')){
// do something
}
哇,你给了我一个主意。我知道它不完整,但确实帮了我很多。现在我可以在数组中使用
('col\u name',$columns)
@digitaldriver调用未定义的方法Doctrine\DBAL\Schema\MySQLSchemaManager::getColumns()
这一个对我有效,不需要导入任何东西。@pankajkumar:Dhanbad,我的意思是Dhanyawad:)哈哈哈,Dhanbad没有错。。我来自丹巴德贾坎德。Nikesh Ji,我想加入你们。请发送邮件或Wtsup进行技术共享。我正在研究Laravel中的多供应商身份验证概念。所以我想你可以帮我。该模型已经开发并在项目中使用。但我想改进一下。我是这么说的。把你的邮件寄进来p1608088@gmail.com . @你从哪里来?