gpt4 book ai didi

php - 使用 Eloquent 将 Laravel 4 与 3 个表联系起来

转载 作者:行者123 更新时间:2023-12-05 06:43:42 24 4
gpt4 key购买 nike

我想使用 ORM 与 3 个表建立关系,但不能。我的 table

用户表

id | userame | name |
1 Ellie Elen
2 Pol Paul

记录表

id | user_id| item_id| hour|
1 2 1 3
2 2 2 5

项目表

id |  title 
1 item 1
2 item 2

我正在使用这个逻辑但不能正常工作

class User Extends Eloquent {

public function record()
{
return $this->hasMany('VolunteerRecord');
}

}


class VolunteerRecord Extends Eloquent {

function item() {
return $this->hasMany('VolunteerItem');
}

}

我不明白该怎么做?

最佳答案

您似乎想要在 UsersItems 之间建立多对多关系,但您还想在数据透视表上跟踪小时数。因此,首先,您将使用 belongsToMany() 定义多对多关系。 ,你会告诉 Laravel 你的数据透视表上有额外的数据 withPivot()功能。您的类(class)将如下所示:

class User extends Eloquent {
protected $table = 'users';

public function items() {
return $this->belongsToMany('Item', 'records')->withPivot('hour');
}
}

class Item extends Eloquent {
protected $table = 'items';

public function users() {
return $this->belongsToMany('User', 'records')->withPivot('hour');
}
}

然后,要访问 hour 字段,您可以这样做:

$user = User::first(); // First User
$item = $user->items()->first(); // User's first Item
$hour = $item->pivot->hour; // The 'hour' on the User-Item relationship

此外,您当前的列命名方案对于 Laravel 是正确的,因此您不需要更改它。如果更改列名,则需要在 belongsToMany() 方法中定义它们,如下所示:

$this->belongsToMany('ModelName', 'pivot_table', 'foreign_key', 'other_key');

// For example, in Items::users() you would have this:
$this->belongsToMany('User', 'records', 'users_id', 'items_id');

最后,我假设您的表名为 usersitemsrecords。如果不是,则只需将 usersitemsrecords 的所有实例替换为您的实际表名。

关于php - 使用 Eloquent 将 Laravel 4 与 3 个表联系起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32240709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com