Laravel Livewire 排序非 sql 数据

Laravel Livewire sorting non sql data

您好,我想知道是否可以对不是 sql 的字段进行排序 table 是两个字段的平衡。我有一个 table 字段可以排序,但是当我尝试对不是 sql 字段的字段进行排序时 table 出现有意义的错误,

  <th class=" tracking-wider"wire:click="sortBy('balance')" style="cursor: pointer;">Balance</th>
   <td>{{ ((int)$charge->taskscharges - (int)$charge->payment)}}&euro; </td>

livewire 组件:

   public function sortBy($field){
       if ($this->sortDirection =='asc'){
           $this ->sortDirection ='desc';

       }
       else{
           $this->sortDirection ='asc';
       }
       return $this ->sortBy = $field;
   }

   public function render()
   {   $charges = charge::query()
       ->search($this->search)
       ->orderBy($this->sortBy,$this->sortDirection)
       ->paginate($this->perPage);

       return view('livewire.charges.show',['charges'=>$charges
       ]);
   }

这对你有用吗?

$charges = charge::query()
       ->selectRaw('*, taskscharges - payment as balance')
       ->search($this->search)
       ->orderBy($this->sortBy, $this->sortDirection)
       ->paginate($this->perPage);
 <th class=" tracking-wider"wire:click="sortBy('balance')" style="cursor: pointer;">Balance</th>
 <td>{{ ((int)$charge->balance)}}&euro; </td>

既然你在分页,我认为最好在从数据库中获取分页费用之前计算结果。

您可以在分页后使用 sortBy(function($charge, key){...}) 但是您会得到意想不到的结果,因为第二页的余额可能更高。