2016-05-09 7 views
0

Хорошо, поэтому пытаюсь выяснить, как настроить эти отношения. Использование красноречивого Люмена. У меня две таблицы. Таблица листинга. который содержит консоли. Я не хочу использовать emum или обычный текст, поэтому я хочу извлечь это в консольную таблицу. Консоль 1, консоль 2 и т. Д., Но я не могу заставить отношения по какой-то причине совпадать.Eloquent относится к отношениям не работает

Listing Table: 
id: 1 | console_id: 3 
id: 2 | console_id: 4 
id: 3 | console_id: 3 
id: 4 | console_id: 2 

Console Table: 
id: 1 | console: Console 1 
id: 2 | console: Console 2 
id: 3 | console: Console 3 

Теперь в моей Listing модели у меня есть:

public function console() 
{ 
    return $this->belongsTo('App\Console'); 
} 

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

ответ

1

Я думаю, что Ваш класс не может есть имя консоли, cuz Laravel имеет пространство имен консоли или классы, которые автозагрузчик попытается загрузить.

1) переименовывать Console класс к чему-то вроде ConsoleItem

2) Попробуйте написать это, поля типа точно (Потому что мы не хотим, чтобы изменить структуру таблицы):

public function console() 
{ 
    return $this->belongsTo('App\ConsoleItem', 'console_id', 'id'); 
} 

3) Для того, чтобы получить его с помощью вызова консоли, используя с():

$Listings = Listing::with(['console'])->whereConsoleId(3)->get(); 
foreach($Listings AS $Listing) { 
    echo 'Listing: '.$Listing->id.' | Console: '.$Listing->console->console."<br/>"; 
} 

Если это» все еще не работает, нужно проанализировать, почему.

Поэтому, пожалуйста, добавьте содержимое файлов для своих моделей.

4) кэш чистого автозагрузчик кли команда redump автозагрузчика для композитора и чистые и т.д. вещей:

php artisan clear-compiled 
composer dump-autoload 

Но! Было бы лучше, чтобы ваши модели, чтобы быть в папке приложения/модели, и есть такой код:

<?php namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 

class Console extends Model 

так, то Ваш список будет, как:

<?php namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 

class Listing extends Model { 

    protected $table = 'listing'; 
    public $timestamps = false; 

    public function console() { 
    return $this->belongsTo('App\Models\Console', 'console_id'); 
    } 
} 

использовать их внутри контроллеров:

use App\Models\Listing; 

Проверьте скриншот: http://joxi.ru/82QWW0f1a4YXrd

+0

ок. Таким образом, добавление App \ специально фиксировало проблему отношений! Однако. (Я пытаюсь создать API.), И мне бы очень хотелось, когда я скажу, что List :: all() вытащил текст вместо числа ... как срабатывает связь при выводе из БД? – Citti

+0

Используйте это как: Листинг :: с (['console']) -> get(); но в случае таблицы с тысячами данных я рекомендую вам использовать ее, например, следующим образом: Листинг :: с (['console']) -> paginate (50); и сделайте свой API более разумным, отправив запрос, например: http://somesite.com/api/listing?page=2, который автоматически скажет модели, чтобы вернуть следующие 50 элементов. – num8er

+0

hmm so $ listings = Listing :: with (['console']) -> get(); дд ($ объявления); все еще возвращает идентификатор, а не имя ... – Citti

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

  • Нет связанных вопросов^_^