Laravel: Соедините две таблицы, получите информацию из первой таблицы и получите первое связанное изображение из второй таблицы.

У меня два стола один propertyDetails а другой propertyImages
и я сделал связь между двумя таблицами, как это ..

вот модели

propertyDetails

class PropertyDetail extends \Eloquent {
protected $fillable = [];

public function propImages()
{
return $this->hasMany('PropertyImage', 'property_details_id');
}
}

Таблица миграции

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');
}
}

Таблица миграции

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();
});
}

что я хочу сделать, это выбрать все projectsDetails с первым связанным изображением из таблицы два 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

получил

Неопределенное свойство: Illuminate \ Database \ Eloquent \ Collection :: $ image

2

Решение

Как говорится в сообщении об ошибке, вы пытаетесь получить отношение к коллекции, отношение существует к объектам (записям) в этой коллекции. Вам нужно перебрать Свойства и для каждого получить свои предметы …

 @foreach ($properties as $property)
// access property properties here
@foreach ($property->image as $image)
// access image properties here.
@endforeach
@endforeach
2

Другие решения

Спасибо за все, вот как я заставил это работать

в разделе просмотра, как @Ferran предложил я сделал это

@foreach ($properties as $property)
// access property properties here
@foreach ($property->image as $image)
// access image properties here.
@endforeach
@endforeach

а потому что мне нужно только первое изображение а не все я нашел решение Вот

Я только что изменил второй @foreach использовать slice
вот окончательный код

@foreach ($properties as $property)
// access property properties here
@foreach($property->propImages->slice(0, 1) as $image)
// access image properties here.
@endforeach
@endforeach
1

Измените эту строку:

return View::make('admin.properties.view', compact('properties'));

в

return View::make('admin.properties.view', ['properties' => $properties]));

и попробуй еще раз.

Замечания: Второй аргумент, передаваемый View :: make, представляет собой массив данных, которые должны быть доступны для представления.

Ссылка

0
По вопросам рекламы [email protected]