laravel中的嵌套查询

时间:2016-04-27 06:15:33

标签: mysql laravel

我有两张桌子:

表1:tbluser

ID 姓名
1 .......... name1
2 .......... name2
3 .......... name3

另一个链接tbluser和tblrole

的表

表2:tbllinkuserrole
userid .......... roleid
1 ............ 2
1 .......... 2
1 .......... 2
2 .......... 2
3 .......... 1

我想将tbluser.Name和用户角色从tbllinkuserrole提取到表中:单个表行(用户记录)可以根据从tbllinkuser角色获取的角色在“角色”列中包含多个行。用户可以拥有多个角色。 你可以帮帮我......

3 个答案:

答案 0 :(得分:0)

尝试这一个

SELECT tbllinkuserrole.userid, tbllinkuserrole.roleid, tbluser.name
FROM tbllinkuserrole, tbluser
WHERE tbllinkuserrole.userid = tbluser.id 

答案 1 :(得分:0)

将行值设为列的mysql

SELECT U.id, U.Name, MAX(CASE WHEN R.roleid = 1 THEN R.roleid END) role_1, MAX(CASE WHEN R.roleid = 2 THEN R.roleid END) role_2 from table_c AS U LEFT JOIN table_b AS R on (U.id = R.userid) WHERE 1 GROUP BY U.id

答案 2 :(得分:0)

Laravel有模型(Eloquent),在模型类中有一些易于用户从表中获取数据的函数。 (这适用于Laravel 5.2)

  

Laravel附带的Eloquent ORM提供了一个漂亮,简单的ActiveRecord实现,用于处理数据库。每个数据库表都有一个相应的"模型"用于与该表交互。模型允许您查询表中的数据,以及在表中插入新记录。 https://laravel.com/docs/5.2/eloquent

首先,您需要一个用户模型(php artisan make:model User)。您需要将用户模式链接到正确的表格。

//File: /laravel/app/User.php
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
    protected $table = 'tbluser';

    public function userRoles() {
        //Get the table data with the user roles
        $this->hasMany('App\UserRoles', 'user_id', 'id');
        //First argument gets the UserRoles Modal
        //Second argument get the UserRoles column 'user_id'
        //Third argument get the User table - column id
}

//File: /laravel/app/UserRoles.php
use Illuminate\Database\Eloquent\Model;
class UserRoles extends Model
{
    protected $table = 'tbllinkuserrole';

    public function rank() {
        //Get the table data with role
        $this->hasOne('App\Roles', 'id', 'role_id');
        //First argument gets the Roles Modal (table)
        //Second argument get the Roles column 'id'
        //Third argument get the UserRoles modal (table) - column role_id
}

//File: /laravel/app/Roles.php
use Illuminate\Database\Eloquent\Model;
class Roles extends Model
{
    protected $table = 'tblroles';
}

现在,如果您致电Auth::user()->userRoles,您将获得一个数组,其中包含表格中与当前用户相关联的所有行。

当您运行此操作时,您将转储所有用户排名数据。

foreach(Auth::user()->userRoles as $userrole) {
    {{ dump($userrole) }}
    {{ dump($userrole->rank) }}
}

我希望这适合你!

可在https://laravel.com/docs/5.2/eloquent

上找到更多信息