首页 > 解决方案 > 如何根据laravel中的条件切换模型中的数据库表

问题描述

我们有一张consignments包含大数据的表格。因此,为了使我们的查询保持快速,我们将旧数据存档到另一个表中,archive_consignments但在我们的寄售模型中,当我像这样使用 eloquent 时,我希望

Consignment::find(1)

首先它应该尝试从consignments表中获取数据,如果它没有找到然后它去archive_consignments

有没有可能用雄辩的模型来定义这个东西Consignment

<?php

namespace App\Models\Admin;

use Illuminate\Database\Eloquent\Model;
use Nicolaslopezj\Searchable\SearchableTrait;
use Staudenmeir\EloquentHasManyDeep\HasRelationships;
use Laravel\Scout\Searchable;


class Consignment extends Model
{
    // use SearchableTrait;
    use Searchable;
    use HasRelationships;

    protected $table = 'consignments';


    // following function to search by id(laravel scout)
    public function getScoutKey()
    {
        return $this->id;
    }
}

标签: phplaraveleloquentlaravel-8

解决方案


我要做的是制作 ArchivedConsignment 模型

此外,我会在存储库中创建一个函数,该函数将被命名为 queryConsignment 并将我的所有条件作为数组传递给 ex。

[ 'where' => ['column' => 'name', 'value' => 'someName'], 'whereIn' => ['column' => 'name', 'value' =>['bla','bla'] ]

在 queryConsignment 里面我会首先调用

$query = Consignment::newQuery()

之后,我将使用循环应用所有这些条件。

 foreach($conditons as $method => $conditon){
       $query->$method($condition['column'], $condition['value');
    }
$data = $query->first();

最后,如果寄售中没有条目,我会对 ArchivedConsignment 做同样的事情


推荐阅读