laravel中两个表做数据关联,这里是一个实际例子,一个产品表products,一个产品视频介绍二维码表pqrcodes,两个表中数据一对一关系,在产品详细信息展示页面想将产品的二维码信息同时展示出来,比如二维码过期时间等,这样就需要对两个表进行数据关联。

Product模型


namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{

   protected $table='products';
   //关联Pqrcode表
   public function pqrcode(){
       //id是pqrcodes的主键,qid是products中pqrcodes的外键
       return $this->hasOne('App\Pqrcode','id','qid');
   }
}

Pqrcode模型

namespace App;

use Illuminate\Database\Eloquent\Model;

class Pqrcode extends Model
{
    protected $table = 'pqrcodes';
}

控制器中调用

$products = Product::with('pqrcode')->where('uid','=',Auth::user()->id)->get();

我采用的是预加载方法with(),这样可以加快速度。

将$products变量注册到前端页面

return view('home.member.index')->with('products',$products);

前端页面中调用关联表中的数据

@foreach($products as $item)
<tr>
    <td>{{$item['id']}}</td>
    <td>{{$item['name']}}</td>
    <td>状态</td>
    <td>{{$item['pqrcode']['expired_at']}}</td>
    <td><button class="btn btn-primary show-qrcode" id="show-qrcode-{{$item['id']}}">查看二维码</button></td>
</tr>
@endforeach