无法在 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" 不是借口。如果你认真对待编程,你应该好好学习。
我正在尝试从用户 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" 不是借口。如果你认真对待编程,你应该好好学习。