php - 如何根据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;
}
}
解决方案
我要做的是制作 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 做同样的事情
推荐阅读
- flutter - 成功数据后如何显示对话框
- dialogflow-es - 如何使用 webhook 在 DialogFlow 中检测环聊卡片点击事件?
- flutter - Flutter Web 的 Twitter 身份验证
- c# - 使用 C# 进行热巧克力验证
- java - 引起:org.postgresql.util.PSQLException:错误:PL/pgSQL 函数上无法识别的配置参数
- android - Android sdk 未安装
- html - 图片元素中的源标记不接受 HTML 中的本地路径
- python - 如何创建具有多个线程的全局列表
- python - pygame.display.toggle_fulscreen() 不工作
- python - Discord py - 从新创建的频道获取频道 ID