雄辩的数据透视表具有不同的列名

时间:2019-06-10 04:47:31

标签: php eloquent

用户表

- id
- name (string)

访问表

- id
- user_id
- viewer_id 

我想获取具有给定用户的链接用户名的访问列表(在这种情况下,id = 1)

$visits = \Visits::where(['user_id' => 1])->with('user')->get();

这是我的造访模式:

class Visits extends Model
{

    protected $table = 'visits';

    public function store(Request $request)
    {
        $visits = new Visits;
        $visits->save();
    }

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

}

这是我的用户模型

use Illuminate\Database\Eloquent\Model;

class User extends Model
{

    public function store(Request $request)
    {
        $user = new User;
        $user->save();
    }

}

它返回数据,但“用户”为 null

2 个答案:

答案 0 :(得分:4)

我认为您需要稍微更改代码。请尝试以下操作:

public function user()
{
    return $this->belongsTo('App\User', 'viewer_id', 'id');
}

$ visits = \ Visits :: where(['user_id'=> 1])-> with('user')-> get();

答案 1 :(得分:0)

我假设在您的visits table中,user_id是被访问的人,viewer_id是被访问的人/用户。

所以,我的Visits模型应该是这样的

class Visits extends Model
{
    protected $table = 'visits';
    protected $fillable = array('user_id','viewer_id'); //Fillable is for Mass Assignment


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

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

现在要使用user_id=1为用户获取所有访客详细信息,我会做类似的事情。

$visitorList = Visits::where('user_id',1)->with('visitorsDetails')->get();
echo <pre>;
print_r($visitorList->toArray()); // This will show the visitor with visitors detail in an array form.

注意::我不确定为什么要在模式内部编写store函数,不需要您直接从控制器本身保存数据。