Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/Database/Concerns/CompilesJsonPaths.php
Строк: 59
<?php

namespace IlluminateDatabaseConcerns;

use 
IlluminateSupportStr;

trait 
CompilesJsonPaths
{
    
/**
     * Split the given JSON selector into the field and the optional path and wrap them separately.
     *
     * @param  string  $column
     * @return array
     */
    
protected function wrapJsonFieldAndPath($column)
    {
        
$parts explode('->'$column2);

        
$field $this->wrap($parts[0]);

        
$path count($parts) > ', '.$this->wrapJsonPath($parts[1], '->') : '';

        return [
$field$path];
    }

    
/**
     * Wrap the given JSON path.
     *
     * @param  string  $value
     * @param  string  $delimiter
     * @return string
     */
    
protected function wrapJsonPath($value$delimiter '->')
    {
        
$value preg_replace("/([\\]+)?\'/""''"$value);

        
$jsonPath collect(explode($delimiter$value))
            ->
map(fn ($segment) => $this->wrapJsonPathSegment($segment))
            ->
join('.');

        return 
"'$".(str_starts_with($jsonPath'[') ? '' '.').$jsonPath."'";
    }

    
/**
     * Wrap the given JSON path segment.
     *
     * @param  string  $segment
     * @return string
     */
    
protected function wrapJsonPathSegment($segment)
    {
        if (
preg_match('/([[^]]+])+$/'$segment$parts)) {
            
$key Str::beforeLast($segment$parts[0]);

            if (! empty(
$key)) {
                return 
'"'.$key.'"'.$parts[0];
            }

            return 
$parts[0];
        }

        return 
'"'.$segment.'"';
    }
}
Онлайн: 0
Реклама