雄辩的ORM关系-是默认的“;没有关系;?

雄辩的ORM关系-是默认的“;没有关系;?,orm,laravel-4,relationship,eloquent,Orm,Laravel 4,Relationship,Eloquent,我正在开发一个应用程序来保存旅游预订信息,在开始使用Laravels ORM之前,我想问一点事情 假设有一群旅客订了一张票,那太好了。他们还想从我们这里购买酒店预订。购买酒店预订是一种选择,团体不必购买酒店预订 因此,我将以下内容设置为我的数据库: Table Group: Group_ID Name etc Table Hotel_Bookings: Group_ID Hotel name Number of people Number of rooms Type of rooms etc

我正在开发一个应用程序来保存旅游预订信息,在开始使用Laravels ORM之前,我想问一点事情

假设有一群旅客订了一张票,那太好了。他们还想从我们这里购买酒店预订。购买酒店预订是一种选择,团体不必购买酒店预订

因此,我将以下内容设置为我的数据库:

Table Group:
Group_ID
Name
etc

Table Hotel_Bookings:
Group_ID
Hotel name
Number of people
Number of rooms
Type of rooms
etc
我知道我可以定义一种关系,例如:

class Group extends Eloquent {

    public function hotel_bookings()
    {
      return $this->hasOne('hotel_bookings');
    }
}

但是如果一个团体不决定和我们一起预订酒店呢?在这种情况下,在hotel_bookings表中没有与该组关联的hotel booking行。ORM会意识到表中没有这样的行吗?它会吐出错误还是什么都不做

第一个表中的一行与第二个表中的一行是否存在一对一关系

希望您能告诉我,我对ORMs是新手,如果这能让我从一开始就更轻松地查询数据库,我想了解更多信息。

一个“hasOne”或“hasMany”并不意味着您必须拥有相关数据,它只是意味着您可以

在这种情况下,
表中的条目可以正常工作,无论该条目是否附加了
酒店预订
条目


另一方面,酒店预订是一种“归属”。假设您的数据库模式如预期的那样反映了这种关系,那么
酒店预订
条目将需要相关的
条目。

如果我理解您的意思,您的组可以有可选的酒店预订(检查Laravel命名约定,使用HotelBooking或HotelBooking)。你建立关系的方式不会导致任何错误。ORM不强制任何类型的关系,您应该在迁移中设置这种关系

Schema::table(...function(Blueprint $table)
{
    ...
    $table->integer('group_id')->unsigned();
    $table->foreign('group_id')->references('id')->on('groups');
这就是为什么酒店预订必须属于一个群体。Eloquent不会自动为您查询以检索组的HotelBooking,它要求您使用以下方式进行查询:

$group = Group::with('hotel_bookings')->first();

这也不会抛出错误,$group->hotel\u预订将只是空的。

完美,这正是我需要知道的。谢谢对不起,我有点进退两难,克马拉德更直接地回答了我的问题,所以我感激地接受了他的回答。我希望你不要介意,我绝对重视你的帮助,谢谢!不用担心,只是在这里消磨时间。是的,这是正确的,一个酒店预订应该有一个与之相关联的团队,否则这是一个无人预订的预订(可能是鬼魂):)。谢谢你,你回答了我关于hasOne关系是否必须有相关数据的问题
$group = Group::with('hotel_bookings')->first();