
[code]

    <table border="true">
      <tr>
        <th style="width:100px">Table</th>
        <th colspan="3" style="width:300px">Columns</th>
      </tr>
      <tr>
        <td style="width:100px">Articles</td>
        <td style="width:100px">id</td>
        <td colspan="2" style="width:200px; color: #aaaaaa">その他</td>
      </tr>
      <tr>
        <td style="width:100px">Article_Tag</td>
        <td style="width:100px">id</td>
        <td style="width:100px">article_id</td>
        <td style="width:100px">tag_id</td>
      </tr>
      <tr>
        <td style="width:100px">Tags</td>
        <td style="width:100px">id</td>
        <td style="width:100px">name</td>
        <td style="width:100px"></td>
      </tr>
    </table>
[/code]

上のTagsテーブルの[name]でArticlesテーブルをソートしたいです。  
公式ドキュメントを参照して下のようにEagerLoadingとクロージャを使ってみましたがソートされません。  
ArticleモデルとTagモデルは互いにbelongsToManyのみでリレーション定義されていて、外部キー制約も正しく定義されています。正常にこれらのデータは出力できますが、ソートされません。もちろんgetTag関数に引数は与えていません。(与えた場合も[name]による絞込みがされません。)

[code]

    use App\Article;
    use App\Tag;
    
    ...
    
    public function __construct(Article $article)
    {
      $this->article = $article;
    }
    
    ...
    
    public function getTag($tag = NULL)
    {  
    $flag = isset($tag);
    
    $articles = $this->article->orderBy('created_at', 'desc')->with([
        'tags' => function($query) use ($flag, $tag){
            ($flag)
                ? $query->where('name', $tag)
                : $query->orderBy('name');
        }
    ])->paginate(15);
    
[/code]


CC BY-SA 3.0
2016-07-25T02:31:20.227
27838
2016-07-25T03:54:54.087
2016-07-25T03:54:54.087
17066
17066
question
laravel laravel-5
Laravel5.1, リレーション, EloquentORM, 多対多, ソート