如何:通过指定的列从另一个表获取数据?

时间:2016-08-16 19:42:19

标签: php laravel laravel-5 model

我有两张桌子

  1. //用户 ID 用户名 密码

  2. //个人资料 用户身份 标志

  3. 我希望获取具有user_id等于已登录用户ID但但我不能这样做的个人资料信息。 我该怎么办?

    /个人资料模型

    <?php
    
    namespace App\Http\Models;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Profile extends Model
    {
        public function user()
        {
            $this->belongsTo('App\User');
        }
    }
    

    //客户端控制器

    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    use App\Http\Models\Profile as Profile;
    use App\Http\Requests;
    use Auth;
    
    class ClientController extends Controller
    {
        public function index()
        {
            $profile = Profile::find(Auth::user()->id);
            return view('client.profil')->with($profile);
        }
    }
    

    我收到了这个错误:

    SQLSTATE[42S22]: Column not found: 1054 Unknown column 'profiles.id' in 'where clause' (SQL: select * from `profiles` where `profiles`.`id` = 1 limit 1)
    

    通常可能是这样的:select * from user user = id = 1 // 1记录了user_id

2 个答案:

答案 0 :(得分:2)

首先,您没有使用主键。没关系,但你需要告诉Eloquent。在Profile模型中,请确保您已将$primaryKey设置为null

protected $primaryKey = null;

然后,您需要在App\User模型中定义关系的倒数:

public function profile()
{
    return $this->hasOne('App\Profile');
}

您真正想要的不是按用户ID查询个人资料,而是加载用户的个人资料,所以让我们看一下:

$user = auth()->user()->load('profile');
$profile = $user->profile;

return view('client.profil', compact('profile'));

答案 1 :(得分:0)

我想你应该试试这个..

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Models\Profile as Profile;
use App\Http\Requests;
use Auth;

class ClientController extends Controller
{
    public function index()
    {
        $profile = Profile::where('user_id',Auth::user()->id)->first();
        return view('client.profil')->with($profile);
    }
}