2017-01-23 15 views
0

Eloquentの関係をEloquentで使用する具体的な例は、次のようになります。私はいくつかのカテゴリのブログを持っています。これらのカテゴリでは、複数のPostを持つカテゴリを表示しますビュー内の私の論理を研究するための実用的な例はどれですか?私はここにいくつか見てきましたが、上記のものには合っていません。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-> posts'を6に限定していますか? – EddyTheDove

答えて

0

まず、あなたはその後、あなたのビューに渡す最初の3

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

をスキップして、そのカテゴリに関連するすべてのポストを取得

$category = Category::find(1); 

を表示するカテゴリを取得

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

あなたが望む場所であれば、あなたの視点で、あなたがすでに行っているのとまったく同じようにブレードでループしてください。

@foreach($posts as $post) 

@endforeach 
関連する問題