Redis @list

Listy – tablice (indeksowane) ciągów znaków: help @list

# LPUSH users 'ala'  - wstawia na początku tablicy users osobę ala

# RPUSH users 'ola' - wstawia na końcu tablicy osobę ola

# LRANGE users 0 -1 - pobiera wszystkie elementy od indeksu 0 do końca tablicy (-1)

1) "ala"
2) "ola"

Czytaj dalej Redis @list

cakephp 4 – zamiana przecinków na kropki -automat

Wartości finansowe typu decimal(10, 2):

class InvoicePosition extends Entity
{
    protected function _setNetto($netto)
    {
        return str_replace(',', '.', $netto);         // zamienia przecinki na kropki w Invoices.netto
    }
}

Javascript – parseFloat nie akceptuje przecinka ’,’

netto = parseFloat( ($(this).val()).replace(',', '.') );

$("#netto").val( netto.toFixed(2) )

Czytaj dalej cakephp 4 – zamiana przecinków na kropki -automat

cakePHP – dociągnięcie modelu powiązanego

mmm

$quest = $this->Questionnaires->get($id, [
          'contain' => [
               'Answers', 
               'Creators' => function($q) {
                      return $q->select(['id', 'firstname', 'lastname']);
                }]
           ]);

// Dociągamy dodakowe modele dla uprawnionych
if($this->hasAccess()) {
    $this->Questionnaires->loadInto($quest, [
            'Projects' => function($q) { 
                              return $q->select(['id', 'manager_id']); 
                            }
             ]);
}

cakePHP – beforeSave

CompaniesTable,

$this == Companies, $this->Projects - powiązana tabela
use Cake\Event\EventInterface;
use Cake\Database\Expression\QueryExpression;

class CompaniesTable extends Table
{

public function beforeSave(EventInterface $event, $entity, $options)
{
  // zmienione pole manager_id
  if($entity->isDirty('manager_id')) {
      $entity->prev_manager_id = $entity->getOriginal('manager_id') ;  // pole przed zmianę

      // podstawienie innej kolumny, wyrażenia
      $set_prev_manager_id = new QueryExpression('prev_manager_id = manager_id');  

      $this->Projects->updateAll(
        [
          $set_prev_manager_id,
          'manager_id' => $entity->manager_id 
        ], 
        [
          'company_id' => $entity->id 
        ]
      );
  }
}

mysql – UPDATE xxxx INNER JOIN

Aktualizuje rekordy powiązane z inną tabelą

UPDATE projects p
 INNER JOIN companies c ON c.id=p.company_id
SET p.manager_id = c.manager_id
WHERE c.manager_id <> p.manager_id
 AND (p.prev_manager_id <> p.manager_id OR p.prev_manager_id IS NULL);
 AND c.manager_id = 1023;

JS – DATE

Znacznik czasu:

var start_date = $('#start-date').val();     // 2023-02-19
var end_date   = $('#end-date').val();       // 2023-02-20

const start_tz = Date.parse(start_date);    // 1686268800000 
const end_tz   = Date.parse(end_date);      // 1686182400000

if(end_tz < start_tz) {
   alert('Błędna data zakończenia. Popraw !!!');
   $('#end-date').val('');
}

Mysql – sortowanie ciągu znaków jako INT

Sortowanie po 3 kategoriach. Ostatnia kategoria jest typu znakowego  ale przechowuje numery np. 5, 5a, 5b, 6, 6a. Chcemy sortować tak jak liczby

 $query->order(['Procedures.proc_type_id', 'Procedures.proc_category_id']);

-- numer jest polem typu varchar, wartości: 5, 5a, 5b, 6, 6a ...
$query->orderAsc( function($exp, $q) {
     return $q->func()->cast('numer','UNSIGNED');
});