2016-12-30 5 views
2

разработчики :)Колонка не найден в Laravel полиморфного отношения

Я сделал отношения (многие-ко-многим полиморфные) Laravel

между:

  • пользователей
  • одежды , обувь, ... ect (каждая из них является моделью самостоятельно)

подсказка: пользователь может любимец любой один он нравится (одежда или обувь ... и т.д.)

пользователя модель:

class User extends Authenticatable 
{ 
public function clothes() 
    { 

     return $this->morphToMany('Etrade\clothes\Clothes' ,'favoritable') 
     ->withTimestamps('created_at','updated_at'); 

    } 
} 

одежды модель:

class Clothes extends Model 
{ 

// relationship with user 
    public function user() 
    { 
     return $this->morphToMany('Etrade\Users\User' ,'favoritable') 
     ->withTimestamps('created_at','updated_at'); 
    } 

} 

выгодная модель:

class Favriable extends Model 
{ 
    protected $table = 'favoritables'; 

    public function favoritable() 
    { 
     return $this->morphTo(); 
    } 
} 

выборки данных с использованием отношения:

- получить все пользователи для данной одежды:

$clo= Etrade\clothes\Clothes::find(35); 

$clo->user; // fetch the relation 

=> Illuminate\Database\Eloquent\Collection {#760 
    all: [ 
     Etrade\Users\User {#761 
     id: 4, 
     name: "Reta Paucek", 
     email: "[email protected]", 
     gender: 0, 
     mobile: "", 
     city_id: 0, 
     active: 0, 
     friend_status: 1, 
     created_at: "2016-12-26 18:53:51", 
     updated_at: "2016-12-26 18:53:51", 
     pivot: Illuminate\Database\Eloquent\Relations\MorphPivot {#213 
      favoritable_id: 35, 
      user_id: 4, 
      created_at: "2016-12-30 03:34:58", 
      updated_at: "2016-12-30 03:34:58", 
     }, 
     }, 
    ], 
    } 

- получить всю одежду для данного пользователя:

$user = Etrade\Users\User::find(4); 

$user->clothes; // fetch the relationship 

Получение ошибки:

Column not found: 1054 Unknown column 'favoritables.clothes_id' in 'field list' (SQL: select 
`clothes`.*, `favoritables`.`favoritable_id` as `pivot_favoritable_id`, `favoritables`.`clothes_id` as `pivot_clothes_id`, `favoritables`.`created_at` as `pivo 
t_created_at`, `favoritables`.`updated_at` as `pivot_updated_at` from `clothes` inner join `favoritables` on `clothes`.`id` = `favoritables`.`clothes_id` where 
`favoritables`.`favoritable_id` = 4 and `favoritables`.`favoritable_type` = Etrade\Users\User)' 

Мой вопрос: как исправить эту ошибку ,,, работу отношений в одном направлении, а не для обоих ??

ответ

0

Я думаю, что вы правильно скопируете код, если да, то я вижу орфографическую ошибку там, извините, но я не в состоянии использовать «комментарий».

//Favriable, or Favoritable 
class Favriable extends Model 
{ 
    protected $table = 'favoritables'; 

    public function favoritable() 
    { 
     return $this->morphTo(); 
    } 
} 

Пожалуйста, обратите внимание, что Eloquent использования Laravel в «змеином случае», чтобы определить Vocabs или что-то, проверить это:

https://laravel.com/docs/5.3/eloquent#defining-models

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

Плюс, если ваш стол называется «избранное», модель должна быть «Любимой». Если таблица в базе данных называется «звезды», модель должна быть «Звезда», просто чтобы назвать несколько примеров.

Надеюсь, что это что-то просветит.

Смежные вопросы