我正在尝试使用Laravel加入两个表格(刚开始使用它)。一个表保存用户信息,另一个表保存用户朋友ID。
所以一个用户可以拥有多个朋友。 我这样做是用户类:
<?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
为什么不加入表格?
感谢您的帮助!
答案 0 :(得分:1)
:
<?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));
}