Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Доброе утро, знаю что всех достал вопросами, но нужна ваша помощь, не как не могу связать таблицу
Выдате такую ошибку
Whoops, looks like something went wrong.
1/1 ErrorException in IndexController.php line 33: Undefined property: Illuminate\Database\Eloquent\Collection::$work
Уже третий день ломаю, голову смотрю документацию и не чего не могу найти
Вот код
Контролера
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Category;
use App\Work;
class IndexController extends Controller
{
public function index()
{
$category = Category::with('work')->get();
dd($category->work);
return view('site.index');
}
}
Модели
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Work extends Model
{
public function category()
{
return $this->belongsTo('App\Work');
}
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
public function work()
{
return $this->hasMany('App\Work');
}
}
Хотя в phpMyadmin связь работает
P.S. помогите плиз
Изменено matros97 (22.12.2016 13:30:35)
Не в сети
Мне показалось, или..? Я, вообще, болею, соображаю сейчас туговато, но...
Он что, сам на себя связь устанавливает?
class Work extends Model
{
public function category()
{
return $this->belongsTo('App\Work');
}
}
Не в сети
Исправил, но все равно ошибка
Whoops, looks like something went wrong.
1/1 ErrorException in IndexController.php line 33: Undefined property: Illuminate\Database\Eloquent\Collection::$work
Не в сети
Интересно, то что в виде если так вывисти, но все работает
@foreach ($category as $c)
<p>{{ $c['name'] }}</p>
@foreach ($c->work as $item)
<p>{{ $item['title'] }}</p>
@endforeach
@endforeach
Не в сети
Исправил, но все равно ошибка
Whoops, looks like something went wrong.
1/1 ErrorException in IndexController.php line 33: Undefined property: Illuminate\Database\Eloquent\Collection::$work
Подозреваю что вы пытаетесь сделать примерно так "@foreach($category->work as $w)"?
Но так не получится, потому что у вас идет запрос "$category = Category::with('work')->get();" тоесть вы получаете коллекцию категорий, и по этому этот код
@foreach ($category as $c)
<p>{{ $c['name'] }}</p>
@foreach ($c->work as $item)
<p>{{ $item['title'] }}</p>
@endforeach
@endforeach
Работает.
Что бы избавиться от ошибки, надо выбрать 1 категорию "$category = Category::with('work')->find($id);", и тогда ошибка исчезнет.
Не в сети
но мне надо сделать так, что бы отображалась работа и была написана её категория работы 15
Не в сети
но мне надо сделать так, что бы отображалась работа и была написана её категория работы 15
$work = Work::with('category')->get();
И надо будит добавить внешний и локальные ключи в связь.
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Work extends Model
{
public function category()
{
return $this->belongsTo(Category::class, 'Локальный ключ к примеру category_id', 'id');
}
}
И тогда вы сможете отобразить все работы и их категории.
@foreach ($work as $w)
<p>{{ $w->name }}</p>
<hr>
{{ $w->category->name }}
@endforeach
Не в сети
У меня ваш код работает
Изменено karandashbest (23.12.2016 12:19:43)
Не в сети
matros97 пишет:но мне надо сделать так, что бы отображалась работа и была написана её категория работы 15
$work = Work::with('category')->get();
И надо будит добавить внешний и локальные ключи в связь.
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Work extends Model { public function category() { return $this->belongsTo(Category::class, 'Локальный ключ к примеру category_id', 'id'); } }
И тогда вы сможете отобразить все работы и их категории.
@foreach ($work as $w) <p>{{ $w->name }}</p> <hr> {{ $w->category->name }} @endforeach
Огромное вам спасибо, все работает думал, что и не получиться, а вы не скажите вчем была ошибка моя
Не в сети
Огромное вам спасибо, все работает думал, что и не получиться, а вы не скажите вчем была ошибка моя
У вас все и так работало. Просто вы получали все категории с работами, а не работы с категориями)
Не в сети
Страницы 1