2017-01-23 4 views
0

у кого-то был бы практический пример использования отношений в Eloquent следующим образом: у меня есть блог с несколькими категориями, в этих категориях у меня будет несколько сообщений, как и для отображения категории с несколькими сообщениями в Представлениях. Какие-нибудь практические примеры для изучения моей логики? Я видел несколько здесь, но никто не вписывается в то, что я хочу выше.Eloquent: отношения между блогами

Модель сообщения:

namespace App; 

use Illuminate\Database\Eloquent\Model; 

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

    public function tags() 
    { 
     return $this->belongsToMany('App\Tag'); 

    } 

    public function comments() 
    { 
     return $this->hasMany('App\Comment'); 
    } 
} 

Контроллер:

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

use App\Http\Requests; 
use App\Post; 
use Mail; 
use Session; 
use App\Category; 

class PagesController extends Controller { 

    public function getIndex() { 

     $posts = category::find(1)->posts()->orderBy('created_at', 'desc'); 
     return view('v1.index')->withPosts($posts); 
     // $posts = Post::orderBy('created_at', 'desc')->limit(3)->get(); 
     // $categorias = Category::find(1); 
     // return view('v1.index')->withPosts($posts)->withCategorias($categorias); 
    } 


    public function getContact() { 
     return view('v1.contato'); 
    } 

    public function postContact(Request $request) { 
     $this->validate($request, [ 
      'email' => 'required|email', 
      'subject' => 'min:3', 
      'message' => 'min:10']); 

     $data = array(
      'email' => $request->email, 
      'subject' => $request->subject, 
      'bodyMessage' => $request->message 
      ); 

     Mail::send('emails.contact', $data, function($message) use ($data){ 
      $message->from($data['email']); 
      $message->to('[email protected]'); 
      $message->subject($data['subject']); 
     }); 

     Session::flash('success', 'Your Email was Sent!'); 

     return redirect('/'); 
    } 


} 

Модель Категория:

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Category extends Model 
{ 
    protected $table = 'categories'; 

    public function posts() 
    { 
     return $this->hasMany('App\Post'); 
    } 
} 

Посмотреть индекс

<div class="col-sm-6"> 
    <div id="home-slider"> 

     @foreach($posts as $post) 
      <div class="post feature-post"> 
       <div class="entry-header"> 
        <div class="entry-thumbnail"> 
         <img class="img-responsive" src="{{ asset('imgs/'.$post->image) }}" width="572" height="350" alt="" /> 
      <div class="catagory world"><a href="#">{{ $post->category->name }}</a></div> 
       </div> 
       <div class="post-content"> 
        <h2 class="entry-title"> 
         <a href="{{ route('posts.show', $post->id) }}">{{ $post->title }}</a> 
        </h2> 
       </div> 
      </div><!--/post--> 
     @endforeach 



    </div> 
</div> 
+1

Кажется, вы уже показываете все сообщения, относящиеся к категории. Так в чем проблема/вопрос? – EddyTheDove

+0

@ EddyTheDove, спасибо за ответ. Пример: У меня есть блог со слайдом, где я хочу отобразить 6 сообщений в категории и скрыть первые 3 сообщения. Мой вопрос, как я должен получить свой контроллер и просмотр, чтобы сделать это ..? – helioh3

+0

Вы должны получить сообщение '$ post', которое вы хотите отобразить первым. Затем получите все сообщения категории '$ posts = $ category-> posts;'. Отправьте их на ваш взгляд 'return view ('v1.index', compact ('post', 'posts'));'. Это то, что вы делаете? но ограничение '$ category-> сообщений' только на 6? – EddyTheDove

ответ

0

Сначала получите категорию, которую хотите отобразить

$category = Category::find(1); 

Тогда Получить все должности, связанные с этой категории, пропуская первый 3

$posts = Post::where('category_id', $category->id) 
->skip(3) 
->take(6) 
->get(); 

Передайте их на ваш взгляд

return view('v1.index', compact('posts')); 

По вашему мнению, где бы вы ни хотели, зацикливайте их с помощью клинка точно так же, как вы уже делаете.

@foreach($posts as $post) 

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