Php Laravel-用于多个表的单一模型
我想对多个表使用一个模型文件 为什么 所有表的表结构都是相同的 我没有几个列可以存储为JSON数组,我希望使用Laravel内置的JSON序列化,而不是手动序列化数组 我已经在laracast的博客上读到,这在Laravel是不可能的,但有没有其他方法可以让它成为可能Php Laravel-用于多个表的单一模型,php,mysql,json,laravel,laravel-5,Php,Mysql,Json,Laravel,Laravel 5,我想对多个表使用一个模型文件 为什么 所有表的表结构都是相同的 我没有几个列可以存储为JSON数组,我希望使用Laravel内置的JSON序列化,而不是手动序列化数组 我已经在laracast的博客上读到,这在Laravel是不可能的,但有没有其他方法可以让它成为可能 提前感谢 您只需创建一个具有所有模型通用逻辑的基础模型,然后创建从基础模型继承的单个模型 class Auto extends Model { protected $casts = [ 'details'
提前感谢 您只需创建一个具有所有模型通用逻辑的基础模型,然后创建从基础模型继承的单个模型
class Auto extends Model
{
protected $casts = [
'details' => 'json',
];
public function getWheelsAttribute()
{
return $this->details->wheels;
}
}
class Car extends Auto
{
// models your "cars" table
}
class Truck extends Auto
{
// models your "trucks" table
}
class Bus extends Auto
{
// models your "buses" table
}
或者,您可以创建一个具有通用功能的特征,并在所有子模型中使用该特征
trait HasJsonDetails
{
protected $casts = [
'details' => 'json',
];
public function getWheelsAttribute()
{
return $this->details->wheels;
}
}
class Car extends Model
{
// models your "cars" table
use HasJsonDetails;
}
class Truck extends Model
{
// models your "trucks" table
use HasJsonDetails;
}
class Bus extends Model
{
// models your "buses" table
use HasJsonDetails;
}
或者,如果表结构确实是并且将永远是相同的,另一种选择是将所有表合并到一个表中,并使用单表继承使多个模型都使用同一个表
使用此方法,您可以向表中添加一个type
字段,告诉您要使用哪个类来建模单个行。它还需要一些定制,但您可以找到要使用的STI软件包,或遵循此论坛线程了解更多信息:
当然,这仍然需要与上述方法之一相结合,以便在多个模型之间共享实现逻辑。据我所知,这是不可能的,因为表或模型都是独立的实体。也许现在你们的表结构是一样的,但在不久的将来,它可能会改变。我建议您在找到解决方案的情况下不要这样做。但是模型非常基本,不太可能被更改,所以我应该这样做,而不是创建多个模型文件@SaadSuri是否有任何选项可以避免创建多个模型文件…在模型中,您可以定义表(
protected$table='my_flights';
),因此,如果您根据传递给模型的某些属性在构造函数中设置此变量,可能会起作用,但您必须尝试,我从未尝试过。这应该会起作用,我觉得,谢谢,@Autista_z,我会尝试,如果它起作用,您可以将其作为答案发布,我会接受答案…再次感谢…如果它起作用,请告诉我,然后我会的将其添加为答案:)