为什么在laravel中未定义变量?

时间:2018-11-14 12:50:57

标签: mysql laravel laravel-5 query-builder laravel-query-builder

我有两个3表:用户,个人资料,friend_request

$ my_profile_id 变量存储用户的个人资料ID的值

$my_user_id = Auth::user()->id;
$my_profile_id =   DB::table('profiles')->select('profiles.profile_id', 'profiles.id')->leftjoin('users','users.id' ,'=' ,'profiles.id')->where('users.id',$my_user_id)->pluck('profiles.profile_id')->first();

$friend_accept = DB::table('friend_request')->select('profiles.profile_id','profiles.first_name','interest_request.sent_at','interest_request.interest_id')->leftjoin('profiles', function($join){
$join->on('interest_request.sender_id' , '=','profiles.profile_id');
$join->orOn('interest_request.to_user_id' , '=','profiles.profile_id');
 })->where('to_user_id',$my_profile_id)->orwhere('sender_id',$my_profile_id)->where('interest_status','2')->whereNotIn('profiles.profile_id', function($q)
  {
   $q->select('profiles.profile_id')->from('profiles')->where('profiles.profile_id',$my_profile_id);
   })->groupby('profiles.profile_id')->get(); 

$my_profile_id变量在whereorwhere子句中正常工作,但是当我在whereNotIn子查询子句中使用时,会产生错误:未定义变量

3 个答案:

答案 0 :(得分:1)

虽然您的代码风格有点难以理解,但看起来您似乎缺少了一步。但是,我的首选代码风格已被包含在可能的工作代码中。不要自欺欺人,不要遵循那种代码风格。

您的代码:

whereNotIn('profiles.profile_id', function($q)
{

邮政编码:

whereNotIn('profiles.profile_id', function($q) use ($my_profile_id) {

发生的事情是您错过了有关使用方法的完整说明。

答案 1 :(得分:0)

u创建一个closure,但没有将参数传递到Closure中,因此您的代码无法正常工作

由于闭包内部的PHP不知道$my_profile_id变量,因此您也需要在闭包中使用use语句

$my_user_id = Auth::user()->id;
$my_profile_id =   DB::table('profiles')->select('profiles.profile_id', 'profiles.id')->leftjoin('users','users.id' ,'=' ,'profiles.id')->where('users.id',$my_user_id)->pluck('profiles.profile_id')->first();

$friend_accept = DB::table('friend_request')->select('profiles.profile_id','profiles.first_name','interest_request.sent_at','interest_request.interest_id')->leftjoin('profiles', function($join){
$join->on('interest_request.sender_id' , '=','profiles.profile_id');
$join->orOn('interest_request.to_user_id' , '=','profiles.profile_id');
 })->where('to_user_id',$my_profile_id)
   ->orwhere('sender_id',$my_profile_id)
   ->where('interest_status','2')
   ->whereNotIn('profiles.profile_id', function($q) use ($my_profile_id) {
           $q->select('profiles.profile_id')->from('profiles')
                ->where('profiles.profile_id',$my_profile_id);
   })->groupby('profiles.profile_id')->get(); 

有关Closure see

的更多信息

答案 2 :(得分:0)

我想您没有在闭包内部传递$my_profile_id变量... 这就是为什么它显示variable is undefined

$my_user_id = Auth::user()->id;
$my_profile_id =   DB::table('profiles')->select('profiles.profile_id', 'profiles.id')->leftjoin('users','users.id' ,'=' ,'profiles.id')->where('users.id',$my_user_id)->pluck('profiles.profile_id')->first();

$friend_accept = DB::table('friend_request')->select('profiles.profile_id','profiles.first_name','interest_request.sent_at','interest_request.interest_id')->leftjoin('profiles', function($join){
$join->on('interest_request.sender_id' , '=','profiles.profile_id');
$join->orOn('interest_request.to_user_id' , '=','profiles.profile_id');
})->where('to_user_id',$my_profile_id)->orwhere('sender_id',$my_profile_id)->where('interest_status','2')->whereNotIn('profiles.profile_id', function($q) use ($my_user_id){ $q->select('profiles.profile_id')->from('profiles')->where('profiles.profile_id',$my_profile_id); })->groupby('profiles.profile_id')->get();

尝试在use ($my_user_id)之后添加function($q)