2016-08-13 2 views
2

두 테이블을 조인하려고합니다.Laravel Join : 비 대상 객체의 속성을 얻으려고 시도합니다.

Asked by {{$user->name}} 

내 컨트롤러에서 나는 다음과 같은 코드를 가지고 :하지만 ... "비 개체의 속성을 얻으려고 노력" 을 오류를주고있다이보기 페이지에서 코드입니다.

$user = DB::table('users') 
        ->join('question', function ($join) { 
      $join ->on('question.id', '=', 'users.id') 
        ->where('question.ques_id' , '=', '$id'); 
    }) 
        ->get(); 

나는 laravel 문서처럼 해보려고했습니다. 왜이 문제가 발생 했는가?

+0

쿼리가 실패 했으므로 '$ user'이 (가) 아무것도 설정되지 않았고 확실히 객체가 아닙니다. – RiggsFolly

+0

select를 시도했습니다. 그것은 작동하지 않았다. $ user에게 무엇을 설정할 수 있습니까? $ user = DB :: table ('users') -> '질문', function ($ join) { $ join-> on ('question.id', '=', 'users.id ') -> select ('users.name ') -> get(); 여기에서 ('question.ques_id ','= ','$ id '); –

+0

'Join '은'' ''없이 소문자이고''$ id ''이어야합니다. ---'$ id'도 ** 익명 함수 **에 있기 때문에 null입니다. 보십시오 :'function ($ join) use ($ id) {' –

답변

1

내가 참여할 때 문제를 파악하지 못했습니다. 다른 방법으로 시도했습니다.

$question = DB::table('question') 
       ->where('ques_id' , $id) 
       ->first(); 
$user = \App\User::find($question->id); 

그것은 만족스럽지 않지만 일을 마쳤습니다.

3

join 당신이

$user = DB::table('users') 
        ->join('question', function ($join) { 
       $join->on('question.id', '=', 'users.id') 
        ->where('question.ques_id' , '=', $id); 
    }) 
        ->get(); 

을 (Advanced Join Statements보고) Laravel Document처럼 그것을 lower-case을하도록해야 그리고 BTW $id 당신이 ' '없이 떠나거나 내가이 생각 " "

을 사용해야합니다 variable 인 방법의 이름입니다 작동!

+0

귀하의 수정이 맞지만 지금은 "Undefined variable : id"오류가 발생합니다. 인수로 $ id를 전달하려고 시도했지만 실패했습니다. $ id는 오류없이 코드의 위쪽 세그먼트에서 사용됩니다. –

+0

'$ id'는'변수'입니다.이'변수'에 대한 값을 설정합니다. 더 많은 코드를 보여줄 수 있습니까? –

+0

@DhrubaChakraborty http : // stackoverflow.com/questions/29548073/laravel-advanced-wheres-how-to-variable-into-function 찾았습니다 : D 익명 함수에 대해 –

1

당신은 가입 단순한를 사용할 수 있습니다

$user = DB::table('users') 
    ->join('question', 'question.id', '=', 'users.id') 
    ->where('question.ques_id' , '=', $id); 
    ->first() 
    ->get(); 

을하지만 간단한 일을 유지하려는 경우, 당신이 그들의 관계와 실체 (UserQuestion)를 정의 PROPPER해야합니다

Class Question extends Model 
{ 
    protected $table = 'question'; 
    protected $primaryKey = 'ques_id'; 

    public function user() 
    { 
     return $this->belongsTo(User::class, 'id'); 
    } 
} 

컨트롤러 코드는 간단하게 유지하십시오.

$user = Question::find($id)->user; 

참고 : 적절한 이름을 지정해야합니다. 내가 question.id을 볼 때 질문의 ID (사용자가 아님)라고 생각합니다.

관련 문제