2015-02-20 2 views
0

Я новичок в Laravel. Я хочу отобразить все сообщения, включая пользователя, разместившего сообщение. У меня есть простой запрос, который отображает все сообщения и отображает выбранный пост с использованием идентификатора сообщения.Как запросить пользователя с сообщениями в Laravel

public function view_post($id) 
    { 
     $post = User::find($id); 

     dd($post); 

    } 

Это прекрасно работает, но я хотел показать все сообщения с пользователем, разместившим сообщение. Как я могу сделать это правильно?

+1

Есть ли у вас какие-либо идеи о Laravel красноречивых моделях? –

+0

Вы определили отношения Модели? http://laravel.com/docs/4.2/eloquent#relationships – Th3Alchemist

+1

Это ОЧЕНЬ РАЗВИВАЕТСЯ в официальной документации Laravel: http: // laravel.com/docs/master/eloquent # eager-loading Вам было бы полезно прочитать его, прежде чем задавать простые вопросы. –

ответ

5

Прямо сейчас, можно получить Posts, сначала получив User, затем используя этот идентификатор, получив Posts. Примечание: это не рекомендуемый способ использования Laravel с отношениями:

$user = User::find($id); 
$posts = Post::where("user_id", "=", $user->id)->get(); 

Хотя это будет работать (если у вас была модель Post с user_id ключа), но правильный путь, чтобы определить отношения в моделей. Для этого он будет hasMany() и belongsTo() по адресу User и Post с уважением. Вот ваша User.php модели класс:

class User extends Eloquent { 
    protected $table = "users"; 

    public function posts(){ 
    return $this->hasMany("Post"); 
    } 
} 

И убедитесь, чтобы определить обратные в вашем Post.php классе модели:

class Post extends Eloquent { 
    protected $table = "posts"; 

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

Наконец, вы можете запросить эти отношения в контроллере, используя следующий:

$user = User::find($id); 
$posts = $user->posts()->get(); 

Это также обеспечит целостность, заставив любые обновления/сбережения использовать правый ключ user_id. Там какая-то довольно обширная документация о том, как использовать Eloquent стиль запросов базы данных, проверить его здесь:

Laravel - Eloquent

Надежда, что помогает!

Редактировать

Чтобы передать это тем, добавьте следующие строки в ваш контроллер:

public function view_post($id){ 
    $user = User::find($id); 
    $posts = $user->posts()->get(); 

    return View::make("view")->with(array("user" => $user, "posts" => $posts)); 
} 

Вам нужен файл в app/views папку с именем (в данном случае) view.blade.php, которые " echos "вся информация о пользователе и сообщениях:

<h2>User: {{ $user->id }} - {{ $user->email }}</h2> 
<br/> 
<h2>Posts:</h2> 
@foreach($posts AS $post) 
<p> {{ $post->id }}: {{ $post->content }}</p> 
@endforeach 

И т.д. и т. д. Примечание, у меня есть не знаю, в каких столбцах таблицы users и posts есть, но с использованием $user->column или $post->column будет отображаться содержимое этого столбца.

Вот документация Views and Responses, которая поможет вам с этим вопросом:

Laravel - Views and Responses

+0

$ posts = $ user-> posts() -> get() эта строка получит все права пользователя? как насчет того, только если я хочу показывать сообщение с пользователем, который разместил его? –

+0

Вы передаете «$ user» и «$ posts» для просмотра и обрабатываете их там. Я сделаю быстрое редактирование. –

+0

Теперь, если вы хотите показать все сообщения со своим пользователем, выполните 'Post :: get()', зациклируйте хотя бы каждый $ $ AS $ post' и вызовите '$ post-> user() -> first', чтобы получить их информации, например, имени и электронной почты. –

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