Laravel口若懸河的“用”簡單的方法

幾個小時前我已經(jīng)發(fā)布了一個相關(guān)的問題,但我不明白為什么Laravel的Eloquent如此復(fù)雜。。。我又一次讀了很多關(guān)于這個問題的帖子,但沒有一個給我一個非常簡單的請求的解決方案。

下面是一個簡單的例子,一篇文章只屬于一篇文章和一個用戶。因此,這些關(guān)系在Post模型中定義如下:

public function article()
{
    return $this->belongsTo(Article::class);
}

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

我是一個很新的LaravelEloquent。。。因此,我只想根據(jù)上面模型中定義的關(guān)系,顯示一個包含所有帖子的列表,其中包含它們的id、評論、相關(guān)用戶名和文章標(biāo)題。我相信這很簡單,我今天剛剛學(xué)會了“with”。

所以在后控制器中,我有:

$posts = Post::orderBy($sortField,$sortOrder)
    ->with(['article','user'])
    ->get();  

這讓我收集了所有的帖子。

第一個問題,我是否必須操作這兩個相關(guān)字段,使它們在下面的列表視圖中易于訪問?或者我可以通過把它放到查詢中來避免控制器中的這種情況嗎?

foreach ($posts as $post) {
    $post->article = $post->article()->pluck('article');
    $post->user = $post->user()->pluck('name');
}

在上面的例子中,$post->article字段列出了數(shù)組中的所有文章標(biāo)題(article字段)。

如果在末尾加上[0],則得到數(shù)組的第一個元素。

如果我使用[post->article\u id],我會得到錯誤的相關(guān)標(biāo)題。

所以沒有什么是我想要的。。。為什么這么復(fù)雜???

最后,下面是我在列表視圖中需要做的事情。

@foreach ($posts as $post)
    <p>{{ $post->id }} : {{ $post->comment }} by {{ $post->name }} from article {{ $post->article }}</p>
@endforeach

通過在查詢生成器中執(zhí)行查詢,我可以立即得到所需的。。。那么如何在Eloquent中做到這一點呢?

$users = DB::table('posts')
    ->join('articles', 'articles.id', '=', 'posts.user_id')
    ->join('users', 'users.id', '=', 'posts.user_id')
    ->select('users.*', 'articles.article', 'users.name')
    ->get();
? 最佳回答:

不清楚是什么讓你誤解了它,所以這里有一個解釋。

首先,在post模型中有兩個belongsTo關(guān)系user&article

當(dāng)你運行這個

$posts = Post::orderBy($sortField,$sortOrder)
    ->with(['article','user'])
    ->get();  

您將獲得一個post和的集合,文章和用戶分別位于$post->article&$post->user屬性中。queryBuild將啟動3個查詢,一個用于帖子,一個用于文章,一個用于用戶的final。

現(xiàn)在,在blade中,您希望訪問文章模型中的屬性article,該屬性位于Post模型中,因此您可以這樣做:

@foreach ($posts as $post)
    .... from article {{ $post->article->article }}</p>
@endforeach

注意:當(dāng)您調(diào)用$post->article()時,您會得到一個查詢生成器,因此您可以使用

  • first()=>模型實例/null
  • get()=>模型實例的集合或空集合
  • pluck()=>屬性的數(shù)組
  • value()=>第一個元素的值,就好像你使用了puck一樣
  • ... (還有其他方法可以獲得結(jié)果)

當(dāng)您調(diào)用$post->article而不使用括號時,它將運行:

  • first()如果關(guān)系是belongsTo
  • get()如果關(guān)系是belongdomany或HasMany或。。。。

OR

如果已經(jīng)獲取了屬性(集合或模型實例),它將為您提供該屬性。

因此,由于您在第一個查詢(已經(jīng)獲取)中使用了with('article'),$post->article將返回模型文章的一個實例,并且不會運行新的查詢。

主站蜘蛛池模板: 狠狠色婷婷久久一区二区 | 亚洲av成人一区二区三区在线观看 | 欧美激情国产精品视频一区二区| 日韩精品成人一区二区三区| 亚洲av午夜福利精品一区| 久久久国产精品亚洲一区| 亚州AV综合色区无码一区| 一区二区三区日本电影| 亚洲一区二区电影| 日本国产一区二区三区在线观看 | 一区二区三区福利视频免费观看| 久久伊人精品一区二区三区| 激情久久av一区av二区av三区| 国产福利一区二区在线视频| 亚洲一区精品中文字幕| 国产精品视频免费一区二区| 国产A∨国片精品一区二区| 色窝窝无码一区二区三区色欲| 国产SUV精品一区二区88| 国产高清在线精品一区二区 | 福利一区二区在线| 国产精品视频一区二区三区四| 一区一区三区产品乱码| 波多野结衣一区二区三区aV高清| 精品黑人一区二区三区| 一区二区国产在线观看| 亚洲欧洲日韩国产一区二区三区| 无码日韩精品一区二区人妻| 成人免费观看一区二区| 国产日韩精品一区二区三区在线| 亚洲AV无码一区二区三区久久精品| 在线观看免费视频一区| 国产乱码精品一区二区三区| 久久久久人妻精品一区蜜桃| 一区二区三区在线播放视频| 亚洲av成人一区二区三区观看在线 | 国产精品男男视频一区二区三区 | 国产精品一区二区无线| 亚洲一区二区三区不卡在线播放| A国产一区二区免费入口| 日韩精品一区二区三区毛片|