首页 > 解决方案 > 试图从另一个表中获取引用的 Laravel Eloquent 数据

问题描述

我只是在学习 Laravel,对于有该框架经验的人来说,这可能非常容易,但我试图从不同的表中获取数据,但不确定我做错了什么。

我有两个表,Users,其中有字段first_namelast_namepair_id。该pair_id列以编程方式限制为null指定“对”的两行中的一个或一个整数。有confirmed_pair一个表,每行有一对并且有一个唯一的pair_id列,它指的是Users表中的那个。

在 ConfirmedPair 模型中,我这样做了:

class ConfirmedPair extends Model
{
    public function pair() {
        return $this->hasMany(User::class, 'pair_id');
    }

    public function pair_names() {      // returns an array of names of the players in the confirmed pair
        $names = User::where("pair_id", $this->get(["pair_id"])[0]->pair_id)->get(['first_name','last_name']);
        if (count($names) == 2) {      // if this pair exists
            return [
                $names[0]['first_name']." ".$names[0]['last_name'],
                $names[1]['first_name']." ".$names[1]['last_name']
            ];
        }
        return null;
    }
}

在控制器中,我这样做了:

class PageController extends Controller
{
    public function index()
    {
        $confirmed_pair = new ConfirmedPair;
        return view('page', compact('confirmed_pair'));
    }
}

如果我这样做,在刀片视图中:

@for ($i = 1; $i < 10; $i++)
    {{ $confirmed_pair->find($i)->pair_names()[0] }}<br>
@endfor

无论$i的值是什么,它都会返回 Confirmed_pa​​ir id #1 的值。

我究竟做错了什么?谢谢!

标签: laraveleloquent

解决方案


如果pair_id分配给 2 个用户

class ConfirmedPair extends Model {

  public function pairs() {
      return $this->hasMany(User::class, 'pair_id', 'pair_id');
  }

  public function pair_names() {
     if ($this->pairs->count() != 2) return null;

     // $this->pairs returns you a Collection of Users
     // try to dd($this->pairs) to see in action 

     $pairs = $this->pairs->toArray();

     return [
        $pairs[0]['first_name']." ".$pairs[0]['last_name'],
        $pairs[1]['first_name']." ".$pairs[1]['last_name']
     ];

  }

}

可以做得更好,但对于您的情况,这应该可行。


推荐阅读