试图从另一个表获取引用的Laravel雄辩数据

时间:2019-12-10 18:20:31

标签: laravel eloquent

我只是在学习Laravel,对于熟悉框架的人来说,这可能非常容易,但是我试图从另一个表中获取数据,不确定自己在做什么错。

我有两个表Users,其中有字段first_namelast_namepair_idpair_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的值。

我在做什么错?谢谢!

1 个答案:

答案 0 :(得分:0)

如果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']
     ];

  }

}

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