Laravel :连接两个 table 从 table 一个获取信息并从 table 两个获取第一张相关图像
Laravel : Join two tables get the info from table one and get the first related image from table two
我有两个table一个是propertyDetails
另一个是propertyImages
我已经完成了两个 table 之间的关系......
这是模型
属性详情
class PropertyDetail extends \Eloquent {
protected $fillable = [];
public function propImages()
{
return $this->hasMany('PropertyImage', 'property_details_id');
}
}
Table迁移
public function up()
{
Schema::create('property_details', function (Blueprint $table) {
$table->increments('id');
$table->enum('purpose', array('Sell', 'Rent'));
$table->integer('property_owner_id')->unsigned();
$table->integer('property_agent_id')->nullable();
$table->integer('bedroom');
$table->integer('dining_room');
$table->integer('bathroom');
$table->string('title', 100);
$table->integer('price');
$table->string('type', 120);
$table->string('specify_type', 120);
$table->text('details');
$table->integer('active');
$table->foreign('property_owner_id')->references('id')->on('property_owners')->onDelete('cascade');
$table->timestamps();
});
}
propertyImages
class PropertyImage extends \Eloquent
{
protected $fillable = [];
public function propertyImages()
{
return $this->belongsTo('PropertyDetail', 'property_details_id');
}
}
Table迁移
Schema::create('property_images', function(Blueprint $table)
{
$table->increments('id');
$table->integer('property_details_id')->unsigned();
$table->foreign('property_details_id')->references('id')->on('property_details')->onDelete('cascade');
$table->binary('image');
$table->timestamps();
});
}
我想要做的是 select 所有 projectsDetails
与来自 table 的第一张相关图像两个 propertyImages
我试过了
$properties = PropertyDetail::with('propImages')->get();
return View::make('admin.properties.view', compact('properties'));
在我看来
@foreach($properties as $property)
{{ HTML::image('images/propertyImages/'.$property->propImages->image, $property->title, array('width'=>767, 'height'=>384)) }}
@endforeach
得到
Undefined property: Illuminate\Database\Eloquent\Collection::$image
更改此行:
return View::make('admin.properties.view', compact('properties'));
到
return View::make('admin.properties.view', ['properties' => $properties]));
然后重试。
注意: 传递给 View::make 的第二个参数是应该对视图可用的数据数组。
如错误所述,您正在尝试获取集合上的关系,该关系存在于该集合中的对象(记录)上。您需要遍历属性,并为每个属性获取它们的项目...
@foreach ($properties as $property)
// access property properties here
@foreach ($property->image as $image)
// access image properties here.
@endforeach
@endforeach
感谢所有这就是我如何让它工作的
在@Ferran 建议的视图部分我这样做了
@foreach ($properties as $property)
// access property properties here
@foreach ($property->image as $image)
// access image properties here.
@endforeach
@endforeach
但是因为我只需要第一张图片而不是全部我找到了解决方案 here
我刚刚将第二个 @foreach
更改为使用 slice
这是最终代码
@foreach ($properties as $property)
// access property properties here
@foreach($property->propImages->slice(0, 1) as $image)
// access image properties here.
@endforeach
@endforeach
我有两个table一个是propertyDetails
另一个是propertyImages
我已经完成了两个 table 之间的关系......
这是模型
属性详情
class PropertyDetail extends \Eloquent {
protected $fillable = [];
public function propImages()
{
return $this->hasMany('PropertyImage', 'property_details_id');
}
}
Table迁移
public function up()
{
Schema::create('property_details', function (Blueprint $table) {
$table->increments('id');
$table->enum('purpose', array('Sell', 'Rent'));
$table->integer('property_owner_id')->unsigned();
$table->integer('property_agent_id')->nullable();
$table->integer('bedroom');
$table->integer('dining_room');
$table->integer('bathroom');
$table->string('title', 100);
$table->integer('price');
$table->string('type', 120);
$table->string('specify_type', 120);
$table->text('details');
$table->integer('active');
$table->foreign('property_owner_id')->references('id')->on('property_owners')->onDelete('cascade');
$table->timestamps();
});
}
propertyImages
class PropertyImage extends \Eloquent
{
protected $fillable = [];
public function propertyImages()
{
return $this->belongsTo('PropertyDetail', 'property_details_id');
}
}
Table迁移
Schema::create('property_images', function(Blueprint $table)
{
$table->increments('id');
$table->integer('property_details_id')->unsigned();
$table->foreign('property_details_id')->references('id')->on('property_details')->onDelete('cascade');
$table->binary('image');
$table->timestamps();
});
}
我想要做的是 select 所有 projectsDetails
与来自 table 的第一张相关图像两个 propertyImages
我试过了
$properties = PropertyDetail::with('propImages')->get();
return View::make('admin.properties.view', compact('properties'));
在我看来
@foreach($properties as $property)
{{ HTML::image('images/propertyImages/'.$property->propImages->image, $property->title, array('width'=>767, 'height'=>384)) }}
@endforeach
得到
Undefined property: Illuminate\Database\Eloquent\Collection::$image
更改此行:
return View::make('admin.properties.view', compact('properties'));
到
return View::make('admin.properties.view', ['properties' => $properties]));
然后重试。
注意: 传递给 View::make 的第二个参数是应该对视图可用的数据数组。
如错误所述,您正在尝试获取集合上的关系,该关系存在于该集合中的对象(记录)上。您需要遍历属性,并为每个属性获取它们的项目...
@foreach ($properties as $property)
// access property properties here
@foreach ($property->image as $image)
// access image properties here.
@endforeach
@endforeach
感谢所有这就是我如何让它工作的
在@Ferran 建议的视图部分我这样做了
@foreach ($properties as $property)
// access property properties here
@foreach ($property->image as $image)
// access image properties here.
@endforeach
@endforeach
但是因为我只需要第一张图片而不是全部我找到了解决方案 here
我刚刚将第二个 @foreach
更改为使用 slice
这是最终代码
@foreach ($properties as $property)
// access property properties here
@foreach($property->propImages->slice(0, 1) as $image)
// access image properties here.
@endforeach
@endforeach