我在users表中有用户的照片,我希望根据我发送的邀请访问这些照片。试图获取与我发送的所有邀请相关的所有用户图片。我有这样的模型结构:
class User extends Eloquent
{
public static $table = 'users';
public static $accessible = array('username', 'email', 'picture', 'password');
public function nests()
{
return $this->has_many('Nest');
}
class Nest extends Eloquent
{
public static $table = 'nests';
public function user()
{
return $this->belongs_to('User');
}
class Invite extends Eloquent
{
public static $table = 'invite';
public function nest()
{
return $this->belongs_to('Nest');
}
以下是我的迁移:
{
Schema::create('users', function($table) {
// auto incremental id (PK)
$table->increments('id');
// varchar 32
$table->string('username', 32);
$table->string('email', 64);
$table->string('picture');
$table->string('password');
$table->string('role');
// boolean
$table->boolean('true');
// created_at | updated_at DATETIME
$table->timestamps();
});
}
{
Schema::create('nests', function($table) {
// auto incremental id (PK)
$table->increments('id');
// varchar 32
$table->string('nestname', 128);
$table->text('info');
$table->integer('user_id');
// boolean
$table->boolean('active');
// created_at | updated_at DATETIME
$table->timestamps();
});
}
{
Schema::create('invite', function($table) {
$table->increments('id');
$table->text('mypeeps');
$table->integer('user_id');
$table->integer('nest_id');
$table->string('email', 128);
$table->timestamps();
});
}
以下是我试图获取图片但不起作用的方式:
$users = DB::table('users')
->join('nests', 'nests.user_id', '=', 'users.id')
->join('invite', 'invite.nest_id', '=', 'nests.id')
->where_nest_id($id)
->get(array('users.picture', 'users.username'));
答案 0 :(得分:0)
好吧,我试图猜测你的问题是什么,但我认为你的查询是错误的,你只获取一个用户,因为我尝试了你的代码,这就是我发生的事情。
您说要根据您发送的邀请获取用户的图片,因此最简单的方法是将用户表与邀请表一起加入,但在您输入的代码中,您的查询基于嵌套的id。
我根据nest的id更改你的查询,以便首先获取邀请ID。然后,我进行了另一个查询,其中进程使用邀请ID加入用户表。
// fetch the ids of invitation
$inviteIds = DB::table('invite')
->join('nests', 'invite.nest_id', '=', 'nests.id')
->where_nest_id($id)
->get('invite.id');
// There must be a better clean solution for this, but it works
$ids = array();
foreach($inviteIds as $id){
$ids[] = $id->id;
}
// array of id of invites
$users = DB::table('users')
->join('invite', 'invite.user_id', '=', 'users.id')
->where_in('invite.id', $ids)
->get(array('users.picture', 'users.username'));
// show the users
dd($users);