लार्वेल में माइग्रेशन लिखने के लिए, हमारे पास उन्हें अपने $table कॉलम पर लागू करने के लिए अलग-अलग तरीके हैं। उनमें से एक, उदाहरण के लिए, nullable() है जो उस कॉलम को अशक्त बनाता है।

मैं जानना चाहता हूं कि nullable() जैसे कार्यों को कहां परिभाषित किया गया है। मैं लार्वा में public function nullable() जैसा कुछ नहीं देख सकता। यह इन वर्गों में से एक में होना चाहिए लेकिन मुझे यह नहीं मिल रहा है:

1) vendor\laravel\framework\src\Illuminate\Database\Schema\ColumnDefinition

2) vendor\laravel\framework\src\Illuminate\Support\Fluent

3) vendor\laravel\framework\src\Illuminate\Database\Schema\Blueprint

या इनमें से कोई अन्य वर्ग या इनमें से किसी एक में प्रयुक्त कोई अन्य गुण।

इन कार्यों को कहाँ परिभाषित किया गया है?

3
Majid Alaeinia 22 जुलाई 2019, 16:01

2 जवाब

सबसे बढ़िया उत्तर

अशक्त विधि स्वयं मौजूद नहीं है। यदि आप Blueprint वर्ग पर एक नज़र डालते हैं, तो addColumn विधि ColumnDefinition का एक उदाहरण लौटाती है।

और ColumnDefinition एक खाली वर्ग है जो केवल Fluent वर्ग का विस्तार करता है जिसमें निम्न __call विधि शामिल है:

/**
 * Handle dynamic calls to the fluent instance to set attributes.
 *
 * @param  string  $method
 * @param  array   $parameters
 * @return $this
 */
public function __call($method, $parameters)
{
    $this->attributes[$method] = count($parameters) > 0 ? $parameters[0] : true;

    return $this;
}

इसलिए, जब आप $table->string('name')->nullable(); निष्पादित करते हैं, तो यह __call में चला जाता है क्योंकि nullable विधि मौजूद नहीं है और nullable विशेषता को true में सहेजता है। जिसका अनुवाद भी होता है:

$this->attributes['nullable'] = true;

और फिर MySqlGrammar क्लास में, यह जांचता है कि कॉलम अशक्त है या नहीं:

/**
 * Get the SQL for a nullable column modifier.
 *
 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
 * @param  \Illuminate\Support\Fluent  $column
 * @return string|null
 */
protected function modifyNullable(Blueprint $blueprint, Fluent $column)
{
    if (is_null($column->virtualAs) && is_null($column->storedAs)) {
        return $column->nullable ? ' null' : ' not null';
    }
}

__call के बारे में अधिक जानकारी के लिए: https:/ /www.php.net/manual/hi/language.oop5.overloading.php#object.call

5
Chin Leung 22 जुलाई 2019, 16:11

nullable जैसे संशोधक कार्य डेटाबेस ड्राइवर (या लार्वेल में घोषित व्याकरण) के आधार पर भिन्न होते हैं

आप जो चाहते हैं वह vendor\laravel\framework\src\Illuminate\Database\Schema\Grammars\ में पा सकते हैं

Mysql के लिए, Illuminate\Database\Schema\Grammars\MySqlGrammar जांचें

3
N69S 22 जुलाई 2019, 16:07