Laravel: невозможно присоединиться к столам - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь объединить две таблицы с помощью Laravel (только начал использовать).Одна таблица содержит информацию о пользователе, а другая таблица содержит идентификаторы друзей пользователей.

Таким образом, у одного пользователя может быть несколько друзей.Я сделал это пользовательский класс:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $table="user_info";

    public function getFriends()
    {
        //user_id is the column in the user_friends table that should be linked to the id table in this class table (user_info)

        return $this->hasMany('App\UserFriends','user_id','id');
    }
}

И другой класс (UserFriends)

namespace App;

use Illuminate\Database\Eloquent\Model;

class UserFriends extends Model
{
    protected $table="user_friends";
}

Затем в контроллере я вызываю

$t = $this->sql_obj->getFriends()->toSql();

Однако, если яраспечатайте результат этого, он возвращает это:

select * from `user_friends` where `user_friends`.`user_id` is null and `user_friends`.`user_id` is not null

Почему он не присоединяется к таблицам?

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 08 июня 2018

в вашей UserModel:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $table="user_info";

    public function getFriends()
    {
       return $this->belongsToMany('App\User', 'user_friends', 'user_id', 'id');
    }
}

в вашем контроллере:

, если вы хотите получить друга пользователя Auth:

 public function friends(Request $request){

      $friends = Auth::user()->getFriends;
      return response()->json(array('friends'=>$friends));   

 }

, если вы хотите получить другиеДрузья пользователя:

  public function friends(Request $request){
      $userid=$request->input('userid');
      $user=User::find($userid);
      $friends = $user->getFriends;
      return response()->json(array('friends'=>$friends));   
 }

или Если вы хотите использовать построитель запросов для присоединения:

   use DB;

 public function friends(Request $request){
    $userid=$request->input('userid');  // Auth::user()->id

    $friends= DB::table('user_info')
    ->join('user_friends', 'user_info.id', '=', 'user_friends.user_id')
    ->where('user_friends.user_id', '=',$userid)         
    ->select('user_info.*')
    ->get();

    return response()->json(array('friends'=>$friends));   
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...