Current Situation:我们正在为新的注册创建新的数据库.

Problem:如果在数据库迁移中做了任何更改,我们需要为之前创建的数据库处理它.或者对之前创建的每个数据库运行该migrations.

如果我们 for each 数据库运行迁移,就不会有问题.

Question:如何判断数据库表中有我们在查询中应用条件的列.

目前,我需要首先对第一行启动两个查询,并判断该列的存在性,然后在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();
}

有没有办法在一个查询中实现.或者有更好的方法吗?


Thanks for your time and suggestion.

推荐答案

@DigitalDriver提出了一个使用Schema类的 idea ,所以我就这样try 了

我包括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();

Laravel相关问答推荐

有没有办法使用laravel EXCEL读取和修改EXCEL文件?

Laravel 9 中使用 WHERE 子句的列的 SUM

如何提取每组 groupBy 查询的唯一值?

如何仅将日期列解析为月和日?

在 Laravel 包中的路由上使用显式或隐式模型绑定

Laravel where 子句只返回一个数据库条目

Laravel Homestead vagrant up 超时

Laravel:使用 Input::old 时 textarea 不会重新填充

Laravel Eloquent,仅 Select 存在关系的行

Laravel + SQLite = SQLSTATE[HY000]一般错误:8次try 写入只读数据库

判断 Laravel 模型表中是否存在列,然后应用条件

向 Docker 上的 Artisan 推荐方式

从 Artisan 电话中获得响应

将自定义消息(或任何其他数据)传递给 Laravel 404.blade.php

Laravel Queue,Beanstalkd vs Database,有什么区别?

如何卸载 Laravel Passport

如何在 vs 代码中自动导入 laravel 类

如何在 Eloquent Orm 中实现自引用(parent_id)模型

Laravel 删除集合中的第一项

将图像保存在公共文件夹中,而不是存储 laravel 5