laravel 5雄辩的左连接

时间:2015-12-05 23:28:07

标签: mysql laravel laravel-5 eloquent

我有下一个数据库查询:

Database::select(['*',
     \DB::raw('count(notes.id) as count')
     ])->leftjoin('notes','post.id','=','notes.post_id')
    ->groupBy('post.id'); 

1.如何使用Eloquent

我的关系

//Post model
 public function notes(){
        return $this->hasMany('App\Note','post_id');
    }
//Note model
 public function post(){
        return $this->belongsTo('App\Database');
    }

2.如何获得最佳列表帖子和列表注释。示例现场:
id post | title post | count notes |
   ---注释1
   ..........
更新

 CREATE TABLE `posts` (
        `id` INT(11) NOT NULL AUTO_INCREMENT,
        `title` VARCHAR(255) NOT NULL,
        `text` VARCHAR(255) NULL DEFAULT NULL,
         `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
         `updated_at` TIMESTAMP NULL DEFAULT NULL,
         PRIMARY KEY (`id`)
    )

CREATE TABLE `notes` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `note` VARCHAR(255) NOT NULL DEFAULT '0',
    `user_id` INT(10) UNSIGNED NOT NULL DEFAULT '0',
    `post_id` INT(11) NOT NULL DEFAULT '0',
    `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at` TIMESTAMP NULL DEFAULT NULL,
    PRIMARY KEY (`id`))

1 个答案:

答案 0 :(得分:0)

当我看到您的个案更新时,我认为您的模型中只需要非常雄辩的关系

  1. 将此关系放在App\Post.php

    public function notes(){
       return $this->hasMany('App\Note','post_id');
    }
    
  2. 如果您想获得上述数据,可以使用此代码

    控制器

    $view = view('your-view-file');
    $view->posts = App\Post::all();
    return $view;
    

    查看

    @foreach($posts as $post)
    <tr>
        <td>{{ $post->id }}</td>
        <td>{{ $post->title }}</td>
        <td>{{ $post->notes->count() }}</td>
    </tr>
    @endforeach
    
  3. 您可以使用count()来汇总从数据库中获取的行数