Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 22.12.2016 13:27:00

Не получаеться связать таблицу,

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

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)

Не в сети

#2 22.12.2016 14:24:28

Re: Не получаеться связать таблицу,

Мне показалось, или..? Я, вообще, болею, соображаю сейчас туговато, но...
Он что, сам на себя связь устанавливает?

class Work extends Model
{
    public function category()
    {
        return $this->belongsTo('App\Work');
    }
}

Не в сети

#3 22.12.2016 14:29:16

Re: Не получаеться связать таблицу,

Исправил, но все равно ошибка
Whoops, looks like something went wrong.
1/1 ErrorException in IndexController.php line 33: Undefined property: Illuminate\Database\Eloquent\Collection::$work

Не в сети

#4 22.12.2016 15:08:18

Re: Не получаеться связать таблицу,

Интересно, то что в виде если так вывисти, но все работает

@foreach ($category as $c)
  <p>{{ $c['name'] }}</p>
  @foreach ($c->work as $item)

    <p>{{ $item['title'] }}</p>
  @endforeach
@endforeach

Не в сети

#5 22.12.2016 19:47:57

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Не получаеться связать таблицу,

matros97 пишет:

Исправил, но все равно ошибка
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);", и тогда ошибка исчезнет.

Не в сети

#6 22.12.2016 21:13:15

Re: Не получаеться связать таблицу,

но мне надо сделать так, что бы отображалась работа и была написана её категория работы 15

Не в сети

#7 23.12.2016 10:27:47

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Не получаеться связать таблицу,

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

Не в сети

#8 23.12.2016 12:19:07

Re: Не получаеться связать таблицу,

У меня ваш код работает

Изменено karandashbest (23.12.2016 12:19:43)

Не в сети

#9 23.12.2016 12:26:37

Re: Не получаеться связать таблицу,

TrueKanonir пишет:
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

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

Не в сети

#10 23.12.2016 12:56:24

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Не получаеться связать таблицу,

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

У вас все и так работало. Просто вы получали все категории с работами, а не работы с категориями)

Не в сети

Подвал раздела