Laravel по-русски

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

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

#1 02.01.2015 23:21:30

не работают eloquent relations

вот в этом видео чувак рассказывает про самую простую связь таблиц  http://www.youtube.com/watch?v=xIBST5vV … 39Y1tKl5DB

я сделал все так же как он рассказал

\model\Post.php

class Post extends Eloquent {

	public function user()
	{
		return $this->belongsTo('User');
	}
}



\views\post\showall.blade.php

@extends('template.template')

@section('content')

	@if(isset($posts) && count($posts))

		@foreach ($posts as $post)
			<section>
				<a href="posts/{{ $post->id }}"><h3>{{ $post->title }}</h3></a>
				<img src="{{ $post->image }}" alt="{{ $post->title }}" style="float:left;" />
				<p>{{ Str::limit($post->body, 50) }}</p>
				<p><a href="#">{{ $post->user }}</a></p>
				<section style="clear:both;"></section>
			</section>
		
		@endforeach
	
	@else
	<p>Нет записей в блоге</p>
	@endif
	<?php echo $posts->links(); ?>

@stop

Такой вариант у чувака в видео выводил целую строку из таблицы users.
У меня он выводит пустое место 

<p><a href="#"> </a></p>

Дальше он усложнил {{ $post->user->name }} и получил имя автора.
А у меня такой код привел к ошибке
Trying to get property of non-object (View: ...\app\views\post\showall.blade.php)


Таблица users у меня есть. В ней 2 юзера. В таблице постов проставлены id этих юзеров.



\app\database\migrations\2014_12_31_184209_create_posts_table.php

class CreatePostsTable extends Migration {

	public function up()
	{
		Schema::create('posts', function($table)
		{
			$table->increments('id')->unsigned();
			$table->integer('category_id')->unsigned();
			$table->foreign('category_id')->references('id')->on('categories');
			$table->string('sef', 50);
			$table->string('title', 150);
			$table->text('body');
			$table->string('image', 300);
			$table->integer('author')->unsigned();
			$table->foreign('author')->references('id')->on('users');
			$table->boolean('active', 100);
			$table->string('meta_title', 50);
			$table->string('keywords', 150);
			$table->string('description', 150);
			$table->timestamps();
		});

	}

\app\database\migrations\2014_12_20_085806_create_users_table.php

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration {

public function up() {
  Schema::create('users', function ($table) {
    $table->increments('id');
    $table->string('email')->unique();
    $table->string('name');
    $table->timestamps();
  });
}

Изменено schel4ok (02.01.2015 23:27:41)

Не в сети

#2 03.01.2015 00:20:17

Re: не работают eloquent relations

погуглил и вот тут нашел такую же проблему  http://forumsarchive.laravel.io/viewtopic.php?id=3889

пару советов из этой темы реально помогли

вот этот код помог выводить всю строку из БД при вызове {{ $post->user }}

	public function user()
	{
		return $this->belongsTo('User', 'id');
	}

но при вызове {{ $post->user->name }} всё равно ошибка Trying to get property of non-object (View: ...\app\views\post\showall.blade.php)


от этой ошибки почему-то спасает такой код

@if($post->user)
{{ $post->user->name }}
@endif

И сразу выводится имя юзера. Вот тут я вообще не понимаю. Код остался тот же самый. Просто добавилась проверка существования объекта.

Кто-нибудь понимает смысл этой операции?

Не в сети

#3 03.01.2015 03:51:51

Wide

Re: не работают eloquent relations

Для начала приведите имена моделей, таблиц и полей к нормальному виду. Модель User, таблица users, pk - id, fk - user_id.

Это сразу решит часть проблем и поможет лучше ориентироваться. В т.ч. будут использоваться правильные настройки по умолчанию.

Затем удалите все лишнее из своего кода и анализируйте sql запросы.

#4 05.01.2015 00:43:42

Re: не работают eloquent relations

супер совет. лучше вообще не писать, чем так

Не в сети

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