php - Laravel 多个多对多关系?

标签 php mysql laravel model eloquent

所以我在使用 laravel 时遇到了一个问题,所以我有关系模型 AdSale,然后我设置了与 AdImpressions 的 hasOne 关系。因此,例如,假设我获取了 userId = 1 的所有 AdSale 记录。我得到了 5 个不同的行,对于这 5 行中的每一行,我都有 5 个匹配的 adImpression 行,并包含有关点击次数和展示次数的信息。我的最终目标是获取 AdImpression 行。但是,当我运行我的 Impressions() 方法时,我得到了未定义的方法。但是,如果我单独对我的 AdSale 记录执行 foreach,然后运行我的 Impresssions() 方法,它就会起作用。所以这是我的代码

class AdSale extends Eloquent{

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

}

在这里,我通过 AdImpression 表中的 adSaleId 将我的 AdSale 连接到其各自的 AdImpression。

这就是我在 Controller 中运行的内容。

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

现在我期望的是我的 $impressions 变量将具有与 adSaleId 相关的 AdImpressions 条目,但是我得到未定义的函数,因为有多个值返回到 $saleLocation。如果我将其更改为 ->frist();或在 $saleLocation 上执行 foreach 它可以工作,但不会工作。我需要能够从整体印象中得出总值(value)。任何信息都会很棒。

最佳答案

I get 5 different rows back, for each of those 5 rows I have 5 adImpression rows that match and have info about clicks and impressions.

基于此,我假设您使用了错误的关系。

<强>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()

关于php - Laravel 多个多对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29397563/

相关文章:

php laravel/vuejs 部署我的 vuejs View 未渲染

php - PDOStatement::bindParam data_type 参数列表

MySQL 联合未按预期工作

javascript - 无法使用 sequelize-auto 读取未定义的属性 'findOrCreate'

laravel - 使用 Laravel 路由在 url 中显示名称而不是 id

php - Laravel 急切加载 phpunit 测试

php - 从 html 重定向到 php

php - 在 Laravel 中一对多删除相关模型

php - 将 Crypt 与 Laravel phpunit 测试一起使用

mysql & INTO OUTFILE - 转义或替换数据中的新行