Laravel控制器:“ for”循环仅获得第一次迭代的值

时间:2019-12-09 07:28:24

标签: php laravel

问这个很抱歉,但是我似乎找不到解决我问题的方法。我有以下代码:

<ngb-tabset #tabset>
    <ngb-tab id="tab1" title="Signin">
        <ng-template ngbTabContent>
          <app-signin-container></app-signin-container>
        </ng-template>
    </ngb-tab>
    <ngb-tab id="tab2" title="Login">
        <ng-template ngbTabContent>
          <app-login-container></app-login-container>
        </ng-template>
    </ngb-tab>
</ngb-tabset>

因此,在我的MySQL NewLeads表中,我希望实现这一目标(将潜在客户分配给用户,然后将下一个潜在客户分配给下一个用户,依此类推):

for($x=0; $x<=2; $x++){
            $users = User::where('division', 1)
            ->where('has_been_assigned', null)
            ->first();

            $assignedLead = NewLeads::where('pic_endorsed_to', null)
            ->first();

            $assignedLead->pic_endorsed_to = $users->id;
            $assignedLead->save();

        }

相反,我得到这个:

id     pic_endorsed_to (FKEY)
 1                         1
 2                         2
 3                         3

谁能告诉我如何达到预期的效果?

非常感谢您!

5 个答案:

答案 0 :(得分:2)

为简便起见,请使用OP提供的代码(在撰写本文时):

   $users = User::where('division', 1)
        ->where('has_been_assigned', null)
        ->get();
   foreach ($users as $user){
    $assignedLead = NewLeads::where('pic_endorsed_to', null)
        ->first();
    if(assignedLead){
        $assignedLead->pic_endorsed_to = $users->id;
        $assignedLead->save();
    }else{ break; }
   }

我在这里所做的只是获取用户并将这些用户的ID分配给值为null的NewLeads。

在每个循环中,它将使用pic_endorsed_to提取第一行为null并将值更新为用户的id。

答案 1 :(得分:1)

这是因为您没有在循环内的任何地方使用$ x来使其动态化。 根据要求在某处使用$ x或先删除它。

答案 2 :(得分:0)

您每次都在->first();上运行,而where子句没有任何动态条件,因此它将一次又一次地提取first条记录。

答案 3 :(得分:0)

首先将->first()更改为->get()

然后检查此行,并使用下面给出的代码对其进行更改:

where('pic_endorsed_to', null)
            ->first();

应该像

where('pic_endorsed_to', $mydetail)
            ->get();

答案 4 :(得分:0)

感谢您的投入。好像zahid的评论解决了我当前的问题:

  

您不更新用户。因此在每次迭代中,都有相同的用户。如果没有用户要分配该怎么办? – zahid hasan emon

只需用“ assigned”标记/更新用户状态。

谢谢大家!