如何在Laravel 5.8中加入表

时间:2019-06-19 02:13:15

标签: laravel

我有2个表用户和数据。

  

用户表中的具有:

id |名称|电子邮件|等等

  数据表中的

具有:

id | user_id | no_data |等等

我这样创建模型数据

public function users()
{
    return $this->HasMany(\App\User::class ,'id');
}

我的控制器:

public function pns()
{
    $data = Data::get();

    //DB::table('data')
        //->join('users','data.user_id','=','users.id')
        //->where(['user' => 'something', 'otherThing' => 
         // 'otherThing'])
        //->get(); // i trying to join this table but still error 


    return view('admin.data',['data' => $data]);
}

现在我想在表中显示视图数据:

在我的视图刀片上:

 <th>No </th>
 <th>id </th>
 <th>Name </th>
 <th>email </th>


  @php
  $no=0;
  @endphp
  @foreach ($data as $i)
  <tr>
   <td class=" ">{{ ++$no }}</td>
   <td class=" ">{{ $i->user_id}}</td>
   <td class=" ">{{ $i->users->name}}</td>
   <td class=" ">{{ $i->email}}</td>
  </tr>

显示了此user_id,但无法显示此“名称”并出现错误:

此集合实例上不存在属性[name]。

编辑了我的dd($ data)

#attributes: array:18 [▼
    "id" => 1
    "user_id" => 6
    "email" => 'q@gmail.com'
    //etc
    "created_at" => "2019-06-18 17:27:54"
    "updated_at" => "2019-06-18 17:27:54"
  ]

5 个答案:

答案 0 :(得分:1)

假设,您的一个用户可以拥有多个数据。这是我的解决方法

对于用户模式

class User extends Authenticatable
{

  <YOUR OTHER CODES HERE>

  public function datas(){
     return $this->hasMany(Data::class,'user_id','id');
  }
}

对于 Data.php [数据模式]

class Data extends Model{

 <YOUR OTHER CODE>

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

通过您的控制器:

 $data = Data:with('userDetail')->get();
 echo '<pre>';
 print_r($data->toArray()); // This will give you an array of data with user details. 

答案 1 :(得分:0)

执行此$data = Data::with('users')->get();

答案 2 :(得分:0)

使用此查询

DB::table('data')
->join('users','data.user_id','=','users.id')
->where('user_id','=',1)
// Here you can also add more wheres
// But make sure where column exists in one of queried table i.e in 
// users | data 
->select([
    'no',
    'user_id as id',
    'name',
    'email'   
])
->get(); // i trying to join this table but still error 

答案 3 :(得分:0)

您需要更新数据模型中的关系

public function users()
{
    return $this->hasMany(\App\User::class ,'user_id');
}

应该为有很多而不是有很多,并且 user_id 不是 id

然后使用:$data = Data::with('users')->get();

答案 4 :(得分:0)

在用户模型中使用hasOne

public function data()
{
return $this->hasOne('App\Data', 'user_id');
}

//控制器

return view('admin.data')->with($data);