无法在 Laravel 中使用 Eager Load

Unable to use Eager Load in Laravel

我正在尝试从用户 table 获取 "each user's avatar",使用 laravel 中的 "relation"。下面是我的 Table 和代码。如果我做错了,请帮助。

我有下面提到的型号

<?php


class Mention extends Eloquent {

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'mention';

    protected $fillable = ['username', 'statusid', 'public'];

    public static $rules = [
        'username' => 'required|min:5',
        'statusid' => 'required|min:5',
        'public' => 'required'
    ];

    public function userget() {
        return $this->belongsTo('User');
    }
}

用户模型:

<?php

use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;

class User extends Eloquent implements UserInterface, RemindableInterface {

    use UserTrait, RemindableTrait;

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'users';

    protected $fillable = ['username', 'email', 'password'];

    public static $rules = [
        'username' => 'required|min:5|alpha_num|unique:users',
        'email' => 'required|min:5|email|unique:users',
        'password' => 'required|min:5',
    ];

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = array('password', 'remember_token');


    public function mention() {
        return $this->hasMany('Mention', 'username');
    }


}

下面是我的提及 table :-

+------------+---------------------+------+-----+---------------------+----------------+
| id         | bigint(20) unsigned | NO   | PRI | NULL                | auto_increment |
| username   | varchar(255)        | NO   |     | NULL                |                |
| statusid   | varchar(255)        | NO   |     | NULL                |                |
| created_at | timestamp           | NO   |     | 0000-00-00 00:00:00 |                |
| updated_at | timestamp           | NO   |     | 0000-00-00 00:00:00 |                |
+------------+---------------------+------+-----+---------------------+----------------+

下面是我的用户 Table

+------------+---------------------+------+-----+
| id         | bigint(20) unsigned | NO   | PRI |
| username   | varchar(255)        | NO   |     |
| email      | varchar(255)        | NO   |     |
| password   | varchar(100)        | NO   |     |
| avatar     | varchar(100)        | NO   |     |
| created_at | timestamp           | NO   |     |
| updated_at | timestamp           | NO   |     |
+------------+---------------------+------+-----+

我想通过提及 table 使用 laravel 的 "with" 从用户 table 获取每个用户的头像。

以下是我的尝试:-

$next = Input::get('next') !== NULL ? Input::get('next') : 0;

$mention = Mention::with(array('userget' => function($query) {
    $query->where('username', '=', Auth::user()->username);
}))->skip($next)->take(5)->get()->toArray();

但这总是给 "userget" "null"。我想要的地方。

它应该 return 来自 "mention table" 的所有行,它们各自的用户名 "avatar"。

我在代码中做错了什么吗?

如果你想要所有用户的所有提及(无论它是否是当前授权用户),我认为你不需要添加 wehere('username')

$mention = Mention::with('userget')->skip($next)->take(5)->get()->toArray();

更新

为了能够使用 username 作为关系键,您需要为关系指定它们。

return $this->hasMany('Mention', 'username', 'username');

return $this->belongsTo('User', 'username', 'username');

注意 我再次建议您查看整个外键。 "I'm not really good with the foreign key stuff" 不是借口。如果你认真对待编程,你应该好好学习。