2015-08-27 4 views
2

Я хочу установить связь с 3 таблицами, используя ORM, но не могу. Мои таблицыОтношения Laravel 4 с 3 таблицами с использованием Eloquent

стол пользователя

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

} 

Я не могу понять, как это сделать?

+0

Что не работает должным образом? Каков ваш желаемый результат? Что вы получаете в настоящее время?Если есть ошибка, можете ли вы обновить свой вопрос с помощью трассировки стека? – Ymartin

ответ

0

На основании ваших имен таблиц, я хотел бы предложить следующее, в первую очередь, изменить запись таблицы следующим образом:

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

Они содержат отношения для ваших моделей. Если вам нужно было выбрать несколько записей, для каждой записи вы можете получить пользователя и элемент. Если вы хотите выбрать элемент и все записи для этого элемента. Вы также можете получить пользователя для каждой записи.

+1

Это не сработает, потому что 'hasOne()' ожидает, что столбцы будут иметь стандартные имена столбцов, если вы явно не передадите их в функцию. Однако вы говорите ему изменить имена столбцов на нестандартные имена. – BrokenBinary

1

Похоже, вы хотите, чтобы отношения между многими людьми были между Users и Items, но вы также хотите отслеживать часы на сводной таблице. Итак, сначала вы определите отношения «многие ко многим», используя 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'); 

Наконец, я предполагаю, что таблицы с именем users, items и records. Если это не так, просто замените все экземпляры users, items и records с вашими фактическими именами таблиц.

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 
Смежные вопросы