对于我的应用程序,我将有多个具有相同基本结构的表(自动生成的表)。例如,我有表survey_1
,survey_2
和survey_23
。是否可以创建这样的模型:new Survey(2)
将生成表survey_2
的模型?
答案 0 :(得分:1)
我认为这是可能的。尝试覆盖模型中的__constructor
方法
class Survey extends Model
{
public function __construct( array $attributes = [] )
{
parent::construct($attributes);
if (array_key_exists('table', $attributes)) {
$this->setTable($attributes['table']) ;
}
else {
// do staff when table is not specified
}
}
}
然后
$survey_1 = new Survey(['table' => 'survey_1']);
$survey_2 = new Survey(['table' => 'survey_2']);
$survey_3 = new Survey(['table' => 'survey_3']);
我不知道它是否有效。
但我强烈建议您不要在单独的表格中使用您的方法。
答案 1 :(得分:1)
我有这个。在laravel 6。 我还没有想到这个想法,我想我想拥有多个数据库并使用单独的连接...但这不是问题。
<?php
namespace App\Models\Eloquent;
use Illuminate\Database\Eloquent\Model;
class Project extends Model
{
protected $table = null;
protected $fillable = [
'data',
];
protected $casts = [
'data' => 'object',
];
public function setTable($tableName)
{
$this->table = $tableName;
}
public function scopeTable($query, $tableName)
{
$query->getQuery()->from = $tableName;
return $query;
}
}
测试路径:
Route::get('/write', function () {
$project = new \App\Models\Eloquent\Project();
$project->setTable('project_2');
$project->data = ['hello' => 'dolly'];
$project->save();
});
Route::get('/read', function () {
$data = \App\Models\Eloquent\Project::query()
->table('project_2')
->where('data', 'like', '%dolly%')
->get();
return $data;
});
但这有效。 哦是的。我将模型放入App \ Models \ Eloquent...。这是可选的。