关系Laravel 4与3个表使用Eloquent

时间:2015-08-27 04:25:26

标签: laravel laravel-4 eloquent laravel-orm

我想使用ORM与3表建立关系但不能。我的桌子

用户表

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');
    }

}

我正在使用此逻辑但无法正常工作

var myApp = angular.module('myApp',[]);

//myApp.directive('myDirective', function() {});
//myApp.factory('myService', function() {});

function MyCtrl($scope) {

$scope.option=[{Option: "A", OptionTag: "OptionA"}, {Option: "B", OptionTag: "OptionB"}, {Option: "C", OptionTag: "OptionC"}, {Option: "D", OptionTag: "OptionD"}]; 

}

我不明白该怎么做?

2 个答案:

答案 0 :(得分:1)

您似乎想要UsersItems之间的多对多关系,但您还想跟踪数据透视表上的小时数。首先,您将使用belongsToMany()定义多对多关系,并且您将告诉Laravel您的数据透视表上有withPivot()函数的额外数据。你的课程将如下所示:

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的所有实例。

答案 1 :(得分:0)

在用户模型中

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