2015-04-01 3 views
2

Так что я использую laravel, и я сталкиваюсь с проблемой, поэтому у меня есть реляционная модель AdSale, тогда у меня есть эта настройка с отношениями hasOne с AdImpressions. Например, я могу взять все записи AdSale, где userId = 1. Я получаю 5 разных строк, для каждой из этих 5 строк у меня есть 5 строк adImpression, которые соответствуют и имеют информацию о кликах и показах. Моя конечная цель - получить строки AdImpression. Однако, когда я запускаю мой, есть один метод Impressions(), я получаю неопределенный метод. Однако, если я делаю foreach на моих записях AdSale отдельно, а затем запускаю метод Impresssions(), он работает. Так вот мой кодLaravel несколько много для многих отношений?

class AdSale extends Eloquent{ 

    protected $table = 'AdSale'; 
    public function impressions() 
    { 
     return $this->hasOne('AdImpression','adSaleId','id'); 
    } 

} 

Здесь я подключаю мой Adsale к соответствующему AdImpression через adSaleId в таблице AdImpression.

Это то, что я использую в своем контроллере.

$sales= AdSale::where('userId','=', 1)->get(); 
$impressions = $sales->impressions(); 

Теперь то, что я ожидаю от этого в том, что мой переменных $ впечатления будет иметь запись AdImpressions, что коррелирует с adSaleId, однако я получаю неопределенную функцию, так как существует множество значений, возвращаемых в $ saleLocation. Если я изменю его на -> frist(); или сделать foreach на $ saleLocation, он работает, но это не сработает. Мне нужно иметь возможность суммировать значения из впечатлений в целом. Любая информация была бы потрясающей.

+0

вы уверены, что 'hasOne' правильное соотношение для' AdSale'? Это звучит скорее как «hasMany», нет? Мой ответ предполагает, что он последний, но, вероятно, даже работает с первым. – luchaos

ответ

0

Я получаю 5 разных строк назад, для каждого из этих 5 строк у меня есть 5 строк adImpression, которые соответствуют и имеют информацию о кликах и показах.

Основываясь на этом, я предполагаю, что вы используете неправильные отношения.

1. Изменение Adsale модель отношения

return $this->hasMany('AdImpression','adSaleId'); 

2. Применение eager loading:

$sales = AdSale::with('impressions')->where('userId', 1)->get(); 

3. Доступ в качестве члена, а не метод (отношения уже загружен)

foreach($sales as $sale) { 
    foreach($sale->impressions as $impression) { 
     // 
    } 
} 

4. Получить сумму впечатлений

$sale->impressions->count() 
Смежные вопросы