Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel-用于多个表的单一模型_Php_Mysql_Json_Laravel_Laravel 5 - Fatal编程技术网

Php 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'

我想对多个表使用一个模型文件

为什么

所有表的表结构都是相同的

我没有几个列可以存储为JSON数组,我希望使用Laravel内置的JSON序列化,而不是手动序列化数组

我已经在laracast的博客上读到,这在Laravel是不可能的,但有没有其他方法可以让它成为可能


提前感谢

您只需创建一个具有所有模型通用逻辑的基础模型,然后创建从基础模型继承的单个模型

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,我会尝试,如果它起作用,您可以将其作为答案发布,我会接受答案…再次感谢…如果它起作用,请告诉我,然后我会的将其添加为答案:)