通过查询从laravel中的单个单元格获取数据

时间:2017-02-07 03:24:34

标签: php laravel-5 eloquent laravel-5.3

Json数据

[  
   {  
      "id":2,
      "firstname":"abc",
      "lastname":"def",
      "email":"abc@some.ac.uk",
      "role":1,
      "university":1,
      "school_dept":5,
      "year":2,
      "photo":"URL",
      "bio":"ObxBJIDO6IfOU0DIw8a5",
      "search_status":"available",
      "created_at":null,
      "updated_at":null,
      "languages":[  
         {  
            "id":3,
            "language":"Spanish",
            "pivot":{  
               "user_id":2,
               "language_id":3,
               "type":"native"
            }
         },
         {  
            "id":4,
            "language":"Greek",
            "pivot":{  
               "user_id":2,
               "language_id":4,
               "type":"learn"
            }
         }
      ]
   }
]

我想获取登录用户的language_id。 如果用户以id = 2(auth :: user() - > id)登录。

然后对于上面的数据我想收到输出:

$learn = 4(language_id)

$native= 3(language_id)

我试着这样做:

$learn = User::with('languages')->where([['languages.pivot.user_id',Auth::user()->id],['languages.pivot.type','learn']])

$teach = User::with('languages')->where([['languages.pivot.user_id',Auth::user()->id],['languages.pivot.type','native']])

用户和语言之间的关系是多对多的,额外的字段称为类型(本机或学习)作为支点。

User,Language_User,Language

的表格式
User_table
id
name
....

Language_User
id
user_id
language_id
type('learn','native')

Language_table
id
language

1 个答案:

答案 0 :(得分:1)

执行你所追求的事情的一种方法是约束关系,例如:

$learn = User::with(['languages' => function (Builder $q) {
    $q->wherePivot('type', 'learn');
}])->where('id', Auth::user()->id);

如果是经过身份验证的用户,您可以这样做:

$learn = Auth::user()->languages()->wherePivot('type', 'learn')->get();

或者,如果您甚至可以将其定义为关系:

public function languagesToLearn()
{
   return $this->languages()->wherePivot('type', 'learn');
}

然后你可以这样做:

$learn = User::with('languagesToLearn')->where('id', Auth::user()->id);

$learn = Auth::user()->languagesToLearn;

如果您想获得以后可以使用的语言:

Auth::user()->languagesToLearn()->pluck('language')

https://laravel.com/docs/5.3/queries#aggregates

希望这有帮助!