2016-04-19 2 views
0

私は基本的なフォーラムをセットアップしており、モデル間の関係は完了しています。しかし、私はサブカテゴリに投稿した最後のユーザーを取得しようとして立ち往生しています。これは、そのレイアウト方法です。Laravelフォーラムで掲示された最後のユーザーをつかまえます

MySQLテーブル forum_category(これがメインカテゴリに使用され、また、サブカテゴリー) forum_post(これはポストのために使用されている)。ここ

がある私のForumCategory.php

namespace App\Models\Forum; 
use Illuminate\Database\Eloquent\Model; 

class ForumCategory extends Model { 

    protected $table = 'forum_category'; 

    public static function category() 
    { 
     return ForumCategory::with('ForumSubCategory')->whereNull('parent_id')->get(); 
    } 
    public function User() 
    { 
     return $this->belongsTo('App\User'); 
    } 
    public function ForumSubCategory() 
    { 
     return $this->hasMany('App\Models\Forum\ForumSubCategory' , 'parent_id'); 
    } 
    public function ForumPost() 
    { 
     return $this->hasMany('App\Models\Forum\ForumPost' , 'parent_id'); 
    } 
} 

そしてここにありますForumSubCategory.php同じカテゴリを使用していてもサブカテゴリモデル...

namespace App\Models\Forum; 

use App\User; 
use Illuminate\Database\Eloquent\Model; 

class ForumSubCategory extends Model 
{ 
    protected $table = 'forum_category'; 

    public function ForumCategory() 
    { 
     return $this->belongsTo('App\Models\Forum\ForumCategory'); 
    } 
    public function User() 
    { 
     return $this->belongsTo('App\User'); 
    } 
    public function ForumPost() 
    { 
     return $this->hasMany('App\Models\Forum\ForumPost' , 'parent_id'); 
    } 
} 

そして、ここでは私のForumPost.phpモデル

namespace App\Models\Forum; 

use Illuminate\Database\Eloquent\Model; 

class ForumPost extends Model 
{ 
    protected $table = 'forum_post'; 

    public function User() 
    { 
     return $this->belongsTo('App\User'); 
    } 
    public function ForumSubCategory() 
    { 
     return $this->belongsTo('App\Models\Forum\ForumSubCategory'); 
    } 
} 

された制御装置は、インデックスは、私は現在、投稿私の最後のユーザーを取得しています現時点で

public function index() { 
    return view('forum.index', ['category' => ForumCategory::category()]); 
} 

今かなり基本的ですこれで

public static function LastPost($value) 
{ 
    $lastPost = ForumPost::whereParentId($value)->orderBy('created_at', 'DESC')->pluck('user_id')->first(); 
    return User::whereId($lastPost)->pluck('username')->first(); 
} 

私はしたくないする。私はこれを行うための正しい方法を知りたい:(

は、ここに私の見解

<ul> 
    @foreach ($category as $cat) 
    <li> 
     {{$cat->category_name}} - this is main category 
     {{$cat->category_description}} - this is main category description 

     @if ($cat->ForumSubCategory) 
     <ul> 
      @foreach ($cat->ForumSubCategory as $sub) 
       <li> 
        <a href="/forum/{{$cat->slug}}/{{$sub->slug}}"> - this is the category slug with the sub category slug 
         {{$sub->category_name}} - this is the sub category name 
        </a> 
        {{$sub->category_description}} - this is the sub category description 
        {{$sub->ForumPost->count()}} - this is how many posts are in the sub category 
        {{$sub->LastPost($sub->id)}} - this is how i am currently getting the last user who posted 
       </li> 
      @endforeach 
     </ul> 
     @endif 
    </li> 
    @endforeach 
</ul> 

これを見て時間を割いてくれてありがとう!

あなたは、動的な特性を利用することができ

答えて

1

うち最速のソリューション:

ますCフィルタ/順序関係、したがって以下の関数。

から:

{{$sub->LastPost($sub->id)}} - this is how i am currently getting the last user who posted 
0123あなたのビューで

class ForumSubCategory extends Model 
{ 
    ... 
    public function latestPost() 
    { 
     return $this->hasOne('App\Models\Forum\ForumPost' , 'parent_id')->latest()->with('user'); 
    } 
} 

latest()

は雄弁orderBy('created_at','DESC')

ForumSubCategoryモデルのショートカットです

@if($sub->latestPost) 
    @if($sub->latestPost->user) 
     {{$sub->latestPost->user->username or 'Username not set'}} 
    @else 
     {{'User Not Found'}} 
    @endif 
@else 
    {{'No Last Post'}} 
@endif 

最も安定したソリューションは、ユーザーが、削除された投稿は、など禁止とされているように、エッジの例世話をするフォーラムのサブカテゴリーの周りのサービスクラスでなければなりません。

+0

ありがとう、{{$ sub> latestPost} {{$ sub> latestPost-> idまたはそれが返されたユーザ - >ユーザ名など、オブジェクト以外のオブジェクトのプロパティを取得しようとしている> _ <グーグルグーグルを続ける^ _^ –

+0

'非オブジェクトのプロパティ'は、あなたに 'latestPost'オブジェクトがないことを意味します。または最新の投稿に設定されたユーザさえも含みます。これらのケースに対する完全な解決策が含まれています。 – Mysteryos

+0

OMGありがとう!!!これはずっと面白くなくても私の頭をひっぱっている。はい、それは私がいかに遅いですか! –

0

。チェックですRelationship Methods Vs Dynamic Properties

// Controller 
public function lastPost() 
{ 
    $lastPost = ForumPost::whereParentId($value)->orderBy('created_at', 'DESC')->first(); 

    $username = $lastPost->user->username; 

    return view('post.view', compact('username')); 
} 
+0

返信いただきありがとうございます。私は動的プロパティを見ていきますが、ただの簡単な質問です。だから、lastPostの新しい機能を設定し、ブレードでは{{$ lastPost-> user-> username}}しますか? –

+0

@Unifx私は自分の答えを編集し、そのメソッドをあなたのコントローラの中に追加しました。あなたのビュー{{username}}にあるユーザ名にアクセスしてください –

+0

ありがとうございますが、これは私が後にしたものだと思っていません。それはうまくいきません。 –

関連する問題