无法在Laravel中使用Eager Load

时间:2015-01-03 12:16:17

标签: php laravel laravel-4 relational-database eloquent

我正在尝试从用户表中获取“每个用户的头像”,在laravel中使用“relation”。以下是我的表格和代码。如果我有任何错误,请帮助。

我有提及模型如下

<?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');
    }


}

以下是我的提及表: -

+------------+---------------------+------+-----+---------------------+----------------+
| 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 |                |
+------------+---------------------+------+-----+---------------------+----------------+

以下是我的用户表

+------------+---------------------+------+-----+
| 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   |     |
+------------+---------------------+------+-----+

我希望使用laravel的“with”通过提及表从用户表中获取每个用户的头像。

以下是我的尝试: -

$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”。我想要的地方。

它应该从“提示表”返回其各自用户名的“avatar”的所有行。

我在代码中做错了什么。

1 个答案:

答案 0 :(得分:0)

如果您希望所有用户都提及(无论是否为当前的身份验证用户),我认为您不需要添加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');

注意我再次建议您查看整个外键事项。 &#34;我对外键的东西不太好&#34;不是借口。如果你认真对待编程,你应该对它有所了解。