Как добиться увеличения конкатенированных значений для id

В моем приложении Laravel, когда пользователь отправляет новый заказ, я установил столбец идентификатора заказа в моей таблице, чтобы он был объединением даты, идентификатора пользователя аутентифицированного пользователя и счетчика, который начинается с 1 в моем контроллере, например ;

$date = date ('ymd');
$user = Auth::id ();
$count = 1;

$order = new Order;
$order->order-id = $date. $user. $count;
$order->save ();
$count++;

Теперь я пытаюсь добиться того, чтобы в первый раз, когда пользователь с идентификатором пользователя 90 делает заказ (например, 1 июля), идентификатор заказа - 180701090001 (180701 как дата, 090 как идентификатор пользователя и 001 как счетчик) и когда он делает следующий заказ 3 июля, я должен получить идентификатор заказа 180703090002. Однако сейчас я получаю 180701090001. Как я могу этого добиться?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
32
2

Ответы 2

Почему бы вам не попробовать получить последний сохраненный заказ, а затем добавить плюс один к этому идентификатору заказа

$order = DB::table('orders')->order_by('id', 'desc')->first();
$order_id = $order->order_id + 1;

Спасибо @ luis.i подумал, что есть функция, которую можно использовать для генерации увеличивающегося значения, возможно, в модели заказа или контроллере, а затем при создании новой транзакции эта функция вызывается, и значение объединяется с переменными даты и идентификатора пользователя

banky 02.07.2018 10:17

Может быть, ты сможешь понять это.

echo '<pre>';
class Order
{
    #######################
    # It would be better to separate the database incrementing id  and the transction id for the order
    #######################

    public $id;
    public $transaciton_id;

    /**
     * Set the incrementing id when the object is instantiated and also set the transaction id for this order
     */
    public function __construct($lastid,$user_id)
    {
        $this->id=$lastid+1;  
        $this->set_transaction_id($user_id); 
    }

    /**
     * Set the transaction id
     * 
     */
    private function set_transaction_id($user_id)
    {
        $date = date ('ymd');
        $this->transaciton_id=$date.sprintf("%03d",$user_id).sprintf("%03d",$this->id);
    }
}
$user_id=90;//user id

//array of orders
$orders=[];

//adding new orders
$orders[]=new Order(count($orders),$user_id);
$orders[]=new Order(count($orders),$user_id);
$orders[]=new Order(count($orders),$user_id);
$orders[]=new Order(count($orders),$user_id);
$orders[]=new Order(count($orders),$user_id);

print_r($orders);

Результат:

Array
(
    [0] => Order Object
        (
            [id] => 1
            [transaciton_id] => 180702090001
        )

    [1] => Order Object
        (
            [id] => 2
            [transaciton_id] => 180702090002
        )

    [2] => Order Object
        (
            [id] => 3
            [transaciton_id] => 180702090003
        )

    [3] => Order Object
        (
            [id] => 4
            [transaciton_id] => 180702090004
        )

    [4] => Order Object
        (
            [id] => 5
            [transaciton_id] => 180702090005
        )

)

ОБНОВИТЬ:

чтобы получить последний вставленный идентификатор модели, возможно, вы можете сделать это таким образом. Возможно, это не лучший ответ, но вы можете получить тот же результат.

public static function model_last_id($model)
{
    $example_model=$model::orderBy('id','desc')->First();
    if ($example_model!=null)
        return $example_model->id;
    else
        return null;
}

Спасибо @ kelvin. Не могли бы вы объяснить, как получается $ lastid в конструкции общедоступной функции?

banky 02.07.2018 10:23

$ lastid - это просто пример, но если вы ссылаетесь на модель / таблицу о том, как мы можем получить last_id, тогда есть много способов сделать это, вы можете использовать необработанный запрос, чтобы получить последний вставленный идентификатор, или вы можете проверить модель сама последние вставленные данные и получает их идентификатор. я обновил свой комментарий выше для последнего идентификатора

Kevin Loquencio 02.07.2018 16:53

Другие вопросы по теме