Php 使用雄辩的语言将Laravel 4与3个表格联系起来
我想用ORM与3表建立关系,但不能。我的桌子 用户表Php 使用雄辩的语言将Laravel 4与3个表格联系起来,php,laravel,eloquent,Php,Laravel,Eloquent,我想用ORM与3表建立关系,但不能。我的桌子 用户表 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
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');
}
}
我不明白怎么做?根据您的表名,我建议您首先更改记录表,如下所示:
id | users_id| items_id| hour|
1 2 1 3
2 2 2 5
以下是适用于您的模型的类:
class Users extends Eloquent
{
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
public function records()
{
return $this->hasMany('Records');
}
}
class Records extends Eloquent
{
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'records';
public function record()
{
return $this->hasOne('Users');
}
public function item()
{
return $this->hasOne('Items');
}
}
class Items extends Eloquent
{
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'items';
public function records()
{
return $this->hasMany('Records');
}
}
这些包含模型的关系。
如果要选择一些记录,则可以为每个记录获取用户和项目。如果要选择一个项目以及该项目的所有记录。您还可以获取每条记录的用户。似乎您希望
用户
和项目之间存在多对多关系,但您还希望跟踪数据透视表上的小时数。因此,首先,您将使用定义多对多关系,并告诉Laravel,您的pivot表上有额外的数据。您的类将如下所示:
类用户扩展了雄辩的{
受保护的$table='users';
公共职能项目(){
返回$this->belongstomy('Item','records')->withPivot('hour');
}
}
类项扩展了雄辩的{
受保护的$table='items';
公共功能用户(){
返回$this->belongstomy('User','records')->withPivot('hour');
}
}
然后,要访问hour
字段,您可以执行以下操作:
$user=user::first();//第一用户
$item=$user->items()->first();//用户的第一项
$hour=$item->pivot->hour;//用户项目关系上的“小时”
另外,您当前的列命名方案对于Laravel是正确的,所以您不需要更改它。如果更改列名,则需要在belongtomany()
方法中定义它们,如下所示:
$this->belongtomany('ModelName','pivot_table','foreign_key','other_key');
//例如,在Items::users()中,您将有:
$this->belongTomany('User','records','users\u id','items\u id');
最后,我假设您的表被命名为用户
,项
,以及记录
。如果不是,则只需将用户
、项目
和记录
的所有实例替换为您的实际表名。在用户模型中
public function images()
{
return $this->belongsToMany('Item')->withPivot('hour');
}
在用户控制器中
public function view($username)
{
$user = User::where('name',$username)->firstOrFail();
return View::make('view')->with('user',$user);
}
鉴于
@foreach ($users->items as $item)
name: {{$image->title}}<br>
hour: {{$image->pivot->hour}}<br>
@endforeach
@foreach($users->items as$item)
名称:{{$image->title}}
小时:{{$image->pivot->hour}}
@endforeach
什么工作不正常?你期望的输出是什么?你现在得到了什么?如果出现错误,那么是否可以使用堆栈跟踪更新问题?这不起作用,因为hasOne()
希望列具有标准的列名,如果您不显式地将它们传递到函数中。你告诉他把他的列名改成非标准名称。