我有一个名为Pictunes
的表,其中有一个名为post_creator
的列。在此表中,有一个包含整数值(外键)的列,表示另一个名为id
的表中的Users
列。
username
表格中还有一个Users
列。我想用此值填写外键(在post_creator
列的Pictunes
列内),因此post_creator
将是username
而不是视图中的整数。我不是想改变数据库数据。
我很难弄清楚要引用这个问题的内容,更不用说找到它的答案了。我正在使用PSQL和Laravel 5.1。谢谢!
更新,以下是我的模型和数据库列:
Pictune
型号»
namespace Pictunes;
use Illuminate\Database\Eloquent\Model;
class Pictune extends Model {
/**
* Mass assignable properties
*/
protected $fillable = [
'post_creator',
'image_name',
'audio_name'
];
/**
* Pictunes have only one post creator
*/
function creator() {
return $this->belongsToMany('Pictunes\User', 'pictune_creator', 'post_creator', 'pictune_id')->withTimestamps();
}
/**
* Pictunes have multiple tags
*/
function tags() {
return $this->belongsToMany('Pictunes\Tag')->withTimestamps();
}
}
User
型号»
namespace Pictunes;
use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Foundation\Auth\Access\Authorizable;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
class User extends Model implements AuthenticatableContract,
AuthorizableContract,
CanResetPasswordContract {
use Authenticatable, Authorizable, CanResetPassword;
/**
* Mass assignable properties
*
* @return array
*/
protected $fillable = [
'username',
'email',
'password',
'selfie_name'
];
/**
* Encrypt the password before sending it to the database
*
* @return void
*/
public function setPasswordAttribute($to) {
$this->attributes['password'] = bcrypt($to);
}
/**
* Make the email value lower case
*
* @return void
*/
public function setEmailAttribute($to) {
$this->attributes['email'] = strtolower($to);
}
/**
* Each user has many Pictunes
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
function pictunes() {
return $this->belongsToMany('Pictunes\Pictune', 'pictune_creators', 'id', 'post_creator');
}
}
数据库表»
pictunes
列»
users
列»
更新,我还能做些什么来让这个更容易回答吗?我觉得此时最好的解决方案是使用SQL语句,因为Eloquent似乎只能通过一个不必要且过度的数据透视表提供此功能。
答案 0 :(得分:0)
您通过Eloquent使用关系。确保将额外参数传递给模型中的关系,例如return $this->belongsTo('App\Country', 'city_id')
。如果您不遵守惯例,则需要更改'city_id'
部分以与列名对应。这适用于您正在使用的任何关系,但您要确保知道哪个关系在哪里,因为我认为每个方法的额外参数不同。