Php Laravel 5.5未按预期工作

Php Laravel 5.5未按预期工作,php,laravel,relation,Php,Laravel,Relation,我有三个模型,它们的关系是,ReservedTicketextendsTicket: class Ticket extends Model { protected $fillable = [ 'user_id', 'first_name', 'last_name', 'prefix_name', 'ticket_type_id', 'sold_on', 'sold_by', 'scanned_at', 'scanned_by', ]; public fu

我有三个模型,它们的关系是,
ReservedTicket
extends
Ticket

class Ticket extends Model
{
    protected $fillable = [
        'user_id', 'first_name', 'last_name', 'prefix_name', 'ticket_type_id', 'sold_on', 'sold_by', 'scanned_at', 'scanned_by',
    ];

    public function ticketType()
    {
        return $this->belongsTo(TicketType::class, 'ticket_type_id');
    }

    public function user()
    {
        return $this->belongsTo(User::class);
    }
}
class ReservedTicket extends Ticket
{
    protected $table = 'reserved_tickets';
}
App/TicketType

class TicketType extends Model
{
    protected $fillable = [
        'name', 'startdate', 'enddate', 'countinuous', 'price', 'description', 'personal', 'total', 'minage', 'maxage', 'event_id', 'header_image_path', 'footer_image_path',
    ];

    public function event()
    {
        return $this->belongsTo(Event::class);
    }

    public function tickets()
    {
        return $this->hasMany(Ticket::class);
    }

    public function user()
    {
        return $this->belongsTo(User::class);
    }
}
App/Ticket

class Ticket extends Model
{
    protected $fillable = [
        'user_id', 'first_name', 'last_name', 'prefix_name', 'ticket_type_id', 'sold_on', 'sold_by', 'scanned_at', 'scanned_by',
    ];

    public function ticketType()
    {
        return $this->belongsTo(TicketType::class, 'ticket_type_id');
    }

    public function user()
    {
        return $this->belongsTo(User::class);
    }
}
class ReservedTicket extends Ticket
{
    protected $table = 'reserved_tickets';
}
App/ReservedTicket

class Ticket extends Model
{
    protected $fillable = [
        'user_id', 'first_name', 'last_name', 'prefix_name', 'ticket_type_id', 'sold_on', 'sold_by', 'scanned_at', 'scanned_by',
    ];

    public function ticketType()
    {
        return $this->belongsTo(TicketType::class, 'ticket_type_id');
    }

    public function user()
    {
        return $this->belongsTo(User::class);
    }
}
class ReservedTicket extends Ticket
{
    protected $table = 'reserved_tickets';
}
我已经像在我的应用程序中的任何其他模型上一样设置了关系。我甚至尝试指定外键列,但没有成功

如果我使用检查
TicketType
hasMany()
,我会得到所有
ticket
。但另一方面,它不起作用


我是不是因为继承而错过了什么?我使用的是
ReservedTicket

的一个实例,当将一个类扩展到一个新模型时,您还需要定义扩展类中的关系

class ReservedTicket extends Ticket
{
    protected $table = 'reserved_tickets';

    public function ticketType()
    {
        return $this->belongsTo(TicketType::class, 'ticket_type_id');
    }

    public function user()
    {
         return $this->belongsTo(User::class);
    }
}

将类扩展到新模型时,还需要定义扩展类中的关系

class ReservedTicket extends Ticket
{
    protected $table = 'reserved_tickets';

    public function ticketType()
    {
        return $this->belongsTo(TicketType::class, 'ticket_type_id');
    }

    public function user()
    {
         return $this->belongsTo(User::class);
    }
}


我认为扩展ticket还需要在reservedTicket类中定义关系这看起来是一种糟糕的做法。您有两个具有相同列的表,它们存储几乎相同的实体(票据)。此外,您似乎将
ticket\u type
表与它们中的一个/两个相关联。@apokryfos将票据保存在几个(实际上是3个)表中是因为它们将包含大量数据集,并防止在流量过大的情况下双重销售。DBMS有工具为您解决这些问题。你只是让你的生活变得更艰难。如果表超过一定的大小,那么可以将表移动到专用的MySQL服务器上……我认为扩展票据还需要在reservedTicket类中定义关系。这看起来是一种糟糕的做法。您有两个具有相同列的表,它们存储几乎相同的实体(票据)。此外,您似乎将
ticket\u type
表与它们中的一个/两个相关联。@apokryfos将票据保存在几个(实际上是3个)表中是因为它们将包含大量数据集,并防止在流量过大的情况下双重销售。DBMS有工具为您解决这些问题。你只是让你的生活变得艰难。如果表超过一定的大小,这种方法可以将表移动到专用的MySQL服务器上……它扩展了票证,因此方法不需要重新定义。@devon是的,但他引用了不同的表名,因此也需要建立关系(如果有意义的话)。继承的“$this”是票证表,也许它与反射有关$此->表将是任何继承方法的“保留\u票证”。例如:@Devon But
ReservedTicket
继承自
Ticket
它扩展了Ticket,因此不需要重新定义方法。@Devon是的,但他引用了不同的表名,因此也需要建立关系(如果有意义的话)。继承的“$this”是票证表,也许它与反射有关$此->表将是任何继承方法的“保留\u票证”。例如:@Devon But
ReservedTicket
继承自
Ticket