Пользовательская разбивка по страницам в cakephp

Как и большинство новичков в теге C, на этот вопрос можно ответить, вернувшись к первым принципам:

  • Указатель - это своего рода значение.
  • A переменная содержит значение.
  • Оператор & превращает переменную в указатель.
  • Оператор * превращает указатель в переменную.

(Технически я должен сказать «lvalue» вместо «variable», но я считаю более понятным описать изменяемые места хранения как «переменные».)

Итак, у нас есть переменные:

int i = 5, j = 6;
int *ip1 = &i, *ip2 = &j;

Переменная ip1 содержит указатель . Оператор & превращает i в указатель, и этому значению указателя присваивается значение ip1. Таким образом, ip1 содержит указатель на i.

Переменная ip2 содержит указатель . Оператор & превращает j в указатель, а указатель присваивается ip2. Поэтому ip2 содержит указатель на j.

int **ipp = &ip1;

Переменная ipp содержит указатель. Оператор & превращает переменную ip1 в указатель и значение указателя присваивается ipp. Таким образом, ipp содержит указатель на ip1.

Подведем итог истории:

  • i содержит 5
  • j содержит 6
  • ip1 содержит «указатель на i»
  • ip2 содержит «указатель на j»
  • ipp содержит «указатель на ip1»

Теперь мы говорим

*ipp = ip2;

Оператор * возвращает указатель обратно в переменную. Мы получаем значение ipp, которое является «указателем на ip1 и превращает его в переменную. Какую переменную? ip1, конечно!

Поэтому это просто еще один способ сказать

ip1 = ip2;

Итак, мы получаем значение ip2 .Какой это? "указатель на j". Мы присваиваем этому указателю значение ip1, поэтому ip1 теперь «указатель на j "

Мы только изменили одно: значение ip1:

  • i содержит 5
  • j содержит 6
  • ip1 содержит «указатель на j»
  • ip2 содержит «указатель на j»
  • ipp содержит «указатель на ip1 "

Почему ipp все еще указывает на ip1, а не ip2?

Изменяется переменная, когда вы назначаете ему. Подсчитайте назначения: переменные не могут быть больше, чем есть назначения! Вы начинаете с назначения i, j, ip1, ip2 и ipp. Затем вы назначаете *ipp, который, как мы видели, означает то же самое, что «присваивать ip1». Поскольку вы не назначали ipp во второй раз, это не изменилось!

Если вы хотите изменить ipp, вам действительно нужно назначить ipp:

ipp = &ip2;

например.

0
задан Davit Huroyan 13 July 2018 в 12:06
поделиться

2 ответа

Вы можете попробовать следующее:

       $paginate = [
                        'joins' =>  array(
                array(
                    'table' => 'properties',
                    'alias' => 'Property',
                    'type'  => 'LEFT',
                    'conditions' => array(
                        'Deals.property_id = Property.id'
                    )
                ),
                array(
                    'table' => 'clients',
                    'alias' => 'Client',
                    'type'  => 'LEFT',
                    'conditions' => array(
                        'Deals.client_id = Client.id'
                    )
                ),
                array(
                    'table' => 'properties_flats',
                    'alias' => 'PropertyFlat',
                    'type'  => 'LEFT',
                    'conditions' => array(
                        'Deals.properties_flat_id = PropertyFlat.id'
                    )
                )

            ),
    'fields' => array(
            'Deals.id',
            'Deals.deed_amount',
            'Deals.other_amount',
            'Deals.cash_amount',
            'Deals.total_amount',
            'Deals.client_id',
            'Deals.project_id',
            'Deals.property_id',
            'Deals.properties_flat_id',
            'Deals.date',
            'Deals.status',
            'Deals.invoice_no',
            'Deals.remain_cash_amount',
            'Deals.remain_deed_amount',
            'Deals.remain_other_amount',
            'Deals.remain_deed_amount',
            'Property.name',
            'Client.name',
            'PropertyFlat.name',
            'PropertyFlat.status'


        )
   ];
 $this->set('deals', $this->Paginator->paginate($this->Deals->find('all'), $paginate)->toArray());
1
ответ дан Sehdev 17 August 2018 в 13:05
поделиться

Во-первых, я бы рекомендовал переосмыслить то, как вы построили свой запрос. Почему бы вам просто не использовать метод contains () для извлечения связанных данных?

Во-вторых, вы можете использовать пользовательские поисковые устройства с помощью paginator. Просто создайте его в своем классе Table и верните построенный запрос из него и попросите его использовать его. Подробнее читайте здесь. https://book.cakephp.org/3.0/en/controllers/components/pagination.html

0
ответ дан Stanislav Yakubenko 17 August 2018 в 13:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: