2013-01-11 130 views
0

我正在學習laravel並試圖用laravel創建一個社區。我堅持了一些部分,需要問你們。在laravel中處理數組

現在我正試圖向讀者顯示帖子。

這是我這段代碼到目前爲止 http://i.imgur.com/lc5gX.jpg

做到:

public $restful = true; 
public function get_index($title = '') 
{ 
    //Do we have an arguement? 
     if(empty($title)) 
     {return Redirect::to('dashboard');} 

    $view = View::make('entry'); 
    $query = DB::table('threads')->where('title', '=', $title)->first(); 

    //Do we have this thread? 
     if(!$query) 
     {return Redirect::to('entry/suggest');} 
    //We have? so lets rock it! 
    $view->title = $query->title; //we get the title. 

    $thread_id = $query->id; 

    //getting posts. 

    $posts = DB::table('posts')->where('thread_id', '=', $thread_id)->get(); 


    $view->posts = $posts; 

    return $view; 
} 

和觀點是:

<div id="entrybox"> 
    <h2>{{$title}}</h2> 
@foreach($posts as $post) 
    <p class="entry"><span class="entrynumber">1</span><span class="entry_text">{{$post->post_entry}}</span></p> 
    <p align="right" class="edate"><span class="entry_user">{post_row.POST_USERNAME}</span> <span class="entry_date">{post_row.DATE}</span></p> 
@endforeach 
</div> 

但最困難的部分(對我來說)是整合張貼海報的用戶名或其他用戶信息,例如電子郵件以獲取適度的權限。但是,他們在'用戶'表中。

可以說$ posts變量保存了一個線程的10個帖子的數據 *一個帖子有thread_id,poster_userid,post,posted_date。

如何從'用戶'表中獲取用戶名並將其發送到我的視圖?我確定我需要從數據庫中選擇帖子後使用foreach我只是不知道如何處理foreach中的數組。

回答

3

查一查如何建立模型和它們之間的關係用雄辯的ORM: http://laravel.com/docs/database/eloquent

具體http://laravel.com/docs/database/eloquent#relationships

你應該有三種型號,螺紋,郵政和用戶(改變poster_userid到user_id說明...或你可以保留它,但我不會建議它...只是保持簡單,你也可以使用author_id或者甚至是poster_id,如果浮動你的船隻..一定要改變'user_id'與你選擇)

//application/models/User.php 

class User extends Eloquent { 

public function posts() 
{ 
     return $this->has_many('Post', 'user_id'); 
} 
} 

//application/models/Post.php 
class Post extends Eloquent { 

public function author() 
{ 
    return $this->belongs_to('User', 'user_id'); 
} 

public function thread() 
{ 
    return $this->belongs_to('Thread', 'thread_id'); 
} 
} 

//application/models/Thread.php 
    class Thread extends Eloquent { 

    public function posts() 
    { 
      return $this->has_many('Post', 'thread_id'); 
    } 

    } 

,取而代之的

$query = DB::table('threads')->where('title', '=', $title)->first(); 

//Do we have this thread? 
    if(!$query) 
    {return Redirect::to('entry/suggest');} 
//We have? so lets rock it! 
$view->title = $query->title; //we get the title. 

$thread_id = $query->id; 

//getting posts. 

$posts = DB::table('posts')->where('thread_id', '=', $thread_id)->get(); 

我只想把

$thread = Thread::where('title', '=', $title)->first(); 

if(!$query) 
    {return Redirect::to('entry/suggest');} 

$posts = $thread->posts()->get(); 
//or if you want to eager load the author of the posts: 
//$posts = $thread->posts()->with('author')->get(); 

然後在您的視圖中可以查找用戶」由以下名稱:

$post->author->username; 

容易peezy。

+0

天啊!我會試試這個,謝謝! –

+0

多數民衆贊成酷,但是,我的帖子表有2個ID列一個AI和其他相關的線程。我應該改變thread_id ID? –

+0

每個表只能有一個主鍵,最好稱它爲「id」。不知道程序的其餘部分如何與這些模型聯繫起來,但是,如果您希望將主鍵稱爲「id」以外的其他名稱,那麼在Post類中您可以設置public key =「thread_id」;例如。 –

1

隨着雄辯,你可以用多種方式做到這一點。

首先,您可以在您的發佈模型中添加一個方法來檢索相關數據。這種方法會爲每個帖子創建一個新的查詢,所以它通常不是最好的選擇。

class Post extends Eloquent 
{ 
    public function user() 
    { 
     return $this->has_one('User'); 
    } 
} 

其次,您可以修改您的初始查詢以加入您所需的數據並避免創建撤消查詢。通稱爲「Eager Loading」。

// Example from Laravel.com 

foreach (Book::with('author')->get() as $book) 
{ 
    echo $book->author->name; 
}