2014-08-30 7 views
0

У меня есть две таблицы, одна с пользователями, одна с названием своего документа. Первая таблица состоит из двух столбцов: id и username. Второй состоит из трех столбцов: id, userid и document_name.Laravel/Eloquent query going wrong

Теперь я пытаюсь создать запрос в контроллере. В идеале должно произойти, что если кто-то посещает website.com/{documentname}, он отображает имя пользователя владельца. Кроме того, это должно произойти только в том случае, если текущий зарегистрированный пользователь является владельцем документа. Однако это оказывается более сложным, чем я себе представлял. Как и в, я не вижу, что я делаю неправильно.

Вот запрос:

$user = DB::table('documents') 
      ->join('users', function($join) 
      { 
       $join->on('users.id', '=', 'documents.userid') 
        ->where('documents.userid', '=', Auth::id()) 
        ->where('documents.document_name', '=', $document_name); 
      }) 
      ->get(); 

ответ

0

$document_name не в области видимости функции присоединения: вам необходимо пройти его до закрытия через use

$user = DB::table('documents') 
     ->join('users', function($join) use ($document_name) 
     { 
      $join->on('users.id', '=', 'documents.userid') 
       ->where('documents.userid', '=', Auth::id()) 
       ->where('documents.document_name', '=', $document_name); 
     }) 
     ->get(); 

EDIT

Поскольку условия WHERE относятся к базовой таблице, а не к JOIN:

$user = DB::table('documents') 
     ->join('users', function($join) { 
      $join->on('users.id', '=', 'documents.userid') 
     }) 
     ->where('userid', '=', Auth::id()) 
     ->where('document_name', '=', $document_name); 
     ->get(); 
+0

Хорошо, так что теперь, если я '{{$ user-> имя пользователя}}' Я получаю 'Попытка получить имущество не-object' – User183849481

+0

Включить ведение журнала базы данных в' конфигурации/database.php' чтобы увидеть, как именно строится SQL-запрос. –

+0

'select * from documents internal join users on users.id = documents.id и documents.userid = '1' и documents.document_name = 'testdoc'' – User183849481

2
**Try this query :** 



$user = DB::table('documents') 
    ->leftJoin('users', 'users.id', '=', 'documents.userid') 
    ->where('documents.userid', '=', Auth::id()) 
    ->where('documents.document_name', '=', $document_name); 
    ->get();