【问题标题】:Unable to use Eager Load in Laravel无法在 Laravel 中使用 Eager Load
【发布时间】:2015-03-01 12:40:43
【问题描述】:

我正在尝试使用 laravel 中的“关系”从用户表中获取“每个用户的头像”。下面是我的表格和代码。如果我做错了什么,请帮忙。

我有如下提及模型

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

它应该返回“提及表”中的所有行,并带有各自用户名的“头像”。

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

【问题讨论】:

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


    【解决方案1】:

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

    注意我再次建议您查看整个外键。 “我不太擅长外键的东西”不是借口。如果你对编程很认真,你应该好好学习。

    【讨论】:

    • 兄弟,'userget' =&gt; null 仍然是“null”
    • 现在我看到了真正的问题,您的提及表中没有标准外键 user_id。您确定要通过用户名引用用户吗?
    • 是的,我想通过username 引用用户。我不太擅长“外键”的东西。所以,我不使用它们。
    • 我还是不推荐它。例如,如果您想更改名称,则需要在任何地方进行更新。数字也比字符串快
    • 兄弟,我的外键不是很好,所以我不能使用它们。
    猜你喜欢
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 2015-08-16
    • 2014-12-19
    • 2021-05-04
    • 2019-06-10
    相关资源
    最近更新 更多