Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用雄辩的语言将Laravel 4与3个表格联系起来_Php_Laravel_Eloquent - Fatal编程技术网

Php 使用雄辩的语言将Laravel 4与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

我想用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 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()
希望列具有标准的列名,如果您不显式地将它们传递到函数中。你告诉他把他的列名改成非标准名称。