Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查Laravel模型中是否存在列';s表,然后应用条件_Php_Laravel_Laravel 5_Eloquent - Fatal编程技术网

Php 检查Laravel模型中是否存在列';s表,然后应用条件

Php 检查Laravel模型中是否存在列';s表,然后应用条件,php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,当前情况:我们正在为新注册创建新数据库 问题:如果数据库迁移中发生任何更改,我们需要为以前创建的数据库处理。或者为以前创建的每个数据库运行该迁移 如果我们为每个数据库运行迁移,就不会有问题 问题:如何检查数据库表中我们在查询中应用条件的列 目前,我需要首先对第一行启动两个查询,检查该列是否存在,然后在where子句中应用条件。如下 $firstRow = Model::first(); if(isset($firstRow->is_splited)){ $records = Mod

当前情况:我们正在为新注册创建新数据库

问题:如果数据库迁移中发生任何更改,我们需要为以前创建的数据库处理。或者为以前创建的每个数据库运行该迁移

如果我们为每个数据库运行迁移,就不会有问题

问题:如何检查数据库表中我们在查询中应用条件的列

目前,我需要首先对第一行启动两个查询,检查该列是否存在,然后在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();
}
是否有任何方法可以在一个查询中实现。或者有更好的方法吗



感谢您的时间和建议。

您可以执行以下操作以获得列类数组:

$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 . @你从哪里来?