代码之家  ›  专栏  ›  技术社区  ›  Niklesh Raut

检查LaaFLE模型表中是否存在列,然后应用条件

  •  3
  • Niklesh Raut  · 技术社区  · 6 年前

    现状 :我们正在为新注册创建新数据库。

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

    如果我们为每个数据库运行迁移,没有问题。

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

    当前,我需要首先为第一行发射两个查询并检查该列的存在,然后在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();
    }
    

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


    谢谢你的时间和建议。

    3 回复  |  直到 6 年前
        1
  •  6
  •   Brian Lee    6 年前

    可以执行以下操作来获取列类的数组:

    $columns = $model->getConnection()->getDoctrineSchemaManager()->getColumns();
    

    还有 getColumnListing hasColumn .

        2
  •  6
  •   Niklesh Raut    6 年前

    @数字漂流者提出了一个使用的想法 Schema 上课所以我就这样试了

    我包括 架构

    use Illuminate\Support\Facades\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();
    
        3
  •  4
  •   whmkr    5 年前

    在5.8中工作的更新解决方案

    if ($object->getConnection()
               ->getSchemaBuilder()
               ->hasColumn($object->getTable(), 'column_name')) {
        // required update here
    }
    

    此解决方案只需要$object和'column_name'即可工作。连接名和表名是从对象本身派生的。