微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel hasMany基于2个条件

如何解决Laravel hasMany基于2个条件

我有一个用户模型和一个预订模型。一个用户有很多预订。预订迁移具有以下结构:

  • a)first_user_id 发起预订的用户,并且
  • b)second_user_id 预订的第一位用户

但是,添加此关系时,所有保存的预订仅显示给发起该预订的first_user_id。第二位用户没有预订。

User.PHP中,我得到了

public function hasBookings() {
        return $this->hasMany('App\Models\Booking','first_user_id','user_auth_id');
}

有没有办法对这种关系进行where子句,以便在'user_auth_id'与first_user_idsecond_user_id匹配的情况下附加预订?

解决方法

最后,我创建了一个包含预订和用户信息的数据透视表,然后使用该数据透视表在用户模型中设置一个关系:

  • 创建一个带有用于预订和用户表的外键的数据透视表:
Schema::create('booking_users_profile',function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('user_id')->unsigned();
            $table->foreign('user_id')->references('user_auth_id')->on('users_profile')->onDelete('cascade');
            $table->unsignedBigInteger('booking_id')->unsigned();
            $table->foreign('booking_id')->references('id')->on('bookings')->onDelete('cascade');
            $table->timestamps();
        });


  • 然后在用户模型中:
public function bookings() {
        return $this->hasMany('App\Models\BookingUsersProfile','user_id','user_auth_id');
    }

每当我现在在预订表中创建一个条目时,我都会在数据透视表中创建两个条目,一个用于会话中的每个用户(永远不超过2个)。上面模型中的关系确保用户模型中的预订字段填充有user_id与用户模型ID匹配的那些预订。

foreach ($filteredBookings as $booking) {

            $newBooking = new Booking();

            $newBooking->start = $booking->startDate;
            $newBooking->end = $booking->endDate;
            $newBooking->confirmed = "N";
            $newBooking->save();

            $newPivotBooking = new BookingUsersProfile();
            $newPivotBooking->user_id = $userId;
            $newPivotBooking->booking_id = $newBooking->id;
            $newPivotBooking->save();


            $newPivotBooking = new BookingUsersProfile();
            $newPivotBooking->user_id = $request->secondUserId;
            $newPivotBooking->booking_id = $newBooking->id;
            $newPivotBooking->save();
        }

这解决了我的问题,并给了我想要的结果:

例如ID = 1的用户的用户模型

"bookings": [
{
"id": 1,"user_id": 1,"booking_id": 6,"created_at": "2020-10-02T11:42:11.000000Z","updated_at": "2020-10-02T11:42:14.000000Z",}]

例如ID = 5的用户的用户模型

"bookings": [
{
"id": 2,"user_id": 5,"created_at": "2020-10-02T11:42:20.000000Z","updated_at": "2020-10-02T11:42:23.000000Z",}]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?