Красноречивый оператор where в foreach (Laravel 4)

Итак, я пытаюсь выполнить итерацию и проверить идентификатор сообщения в моей таблице поиска лайков на идентификатор, хранящийся в таблице сообщений. Но я не получаю никакой отдачи вообще. Я просто совершенно не понимаю, что не так в этот момент.

posts.blade.php

<div class="posts"> 
@foreach(Post::orderBy('created_at', 'DSC')->get() as $post)
    <div class="col-md-8" style="background-color: #fff; margin: 10px;">
        <center><h2> {{ $post->title }} </h2></center>
        <textarea class="form-control" readonly="true" style="cursor: text; width: 500px; padding: 10px;"> {{$post->body }}</textarea>

        <div>
            Posted by user: {{ $post->user->username }}
        </div>

        <div>
            Total Likes: {{ $post->likes()->count() }}
            @foreach(Like::where('post_id', '>', $post->post_id) as $l)
                <li> {{ $l->user()->username }} </li>
            @endforeach
        </div>
    </div>
@endforeach
</div>

Модель Like.php

<?php

class Like extends Eloquent
{
    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'likes';

    protected $fillable = array('user_id', 'post_id');

    public $timestamps = false;

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

    public function post()
    {
        return $this->belongsTo('Post');
    }
    }
?>

Модель Post.php

 <?php

class Post extends Eloquent
{

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'posts';

    protected $fillable = array('user_id', 'title', 'body', 'type');

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = array();

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

    public function likes()
    {
        return $this->hasMany('Like');
    }

}

person Brandon    schedule 16.12.2013    source источник
comment
Выполнение этого в вашем представлении считается плохой практикой... Представления не должны ничего знать о вашей бизнес-логике, это уже должно быть сделано вашим репозиторием/моделью и передано вашим контроллером в представление.   -  person Manuel Pedrera    schedule 16.12.2013


Ответы (2)


Что касается вашего запроса, я думаю, что у вас есть две ошибки:

  1. Вам нужно добавить get() после вашего where($condition)
  2. Вы запрашиваете идентификаторы сообщений больше, чем идентификатор вашего сообщения. Разве это не должно быть знаком равенства?

Это должно быть что-то вроде этого:

$likes = Like::where('post_id', '=', $post->post_id)->get();

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

Ваш класс репозитория:

class PostRepository {

    public function byDate()
    {
        // return posts by date
    }

}

Ваш контроллер:

class MyAwesomeController {

    protected $postRepository;

    ...

    public function awesomeSection()
    {
        $posts = $this->postRepository->byDate();

        return View::make('awesome.view')->with('posts' => $posts);
        // or
        return View::make('awesome.view', compact('posts'));
    }

}


Дальнейшее чтение:

person Manuel Pedrera    schedule 16.12.2013

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

Однако в вашем коде отсутствует метод get(). Надеюсь, это решит проблему.

        @foreach(Like::where('post_id', '>', $post->post_id)->get() as $l)
            <li> {{ $l->user()->username }} </li>
        @endforeach
person Anam    schedule 16.12.2013