2017-05-06 19 views
7

मैं laravel में नौसिखिया हूं, क्योंकि मेरा प्रश्न किसी के लिए अजीब हो सकता है। खैर, मेरा सवाल यह है कि मैं लैरवेल Model कक्षा में एक इकाई कैसे लिख सकता हूं जो मेरे माइग्रेशन के बाद डेटाबेस में कोई भी फ़ील्ड नहीं बनाया जाएगा। उदाहरणलार्वेल मॉडल में एक नोटमैपड इकाई कैसे लिखें?

class JobseekerModel extends Model 
{ 
    use SoftDeletes; 
    protected $table='dbl_jobseekers'; 
    protected $primaryKey='id'; 
    protected $fillable=[ 
     'FirstName', 
     'MiddleName', 
     'LastName', 
     'Dob', 
     'Education', 
     'DesireField', 
     'Skill', 
     'SpecialSkill', 
     'Experience', 
     'Location', 
     'HomeAddress', 
     'Salary', 
     'Comenteries', 
     'Resume' 
    ]; 
    protected $dates = ['deleted_at']; 
} 

के लिए यह मेरा आदर्श है, अब मैं एक और संपत्ति मेरे मॉडल में 'PagedListSize' नाम जोड़ना चाहते हैं, लेकिन मैं एक डेटाबेस स्तंभ के रूप में बनाना पसंद नहीं है। फिर मेरे द्वारा इसे कैसे किया जाएगा?

उदाहरण के लिए मैं जो

[NotMapped] 
public int PagedListSize {set; get;} 

तो, मैं यह करने के लिए सक्षम करना तरह लिखा है .Net Framework में NotMapped संपत्ति का उपयोग करने के परिचित हूँ,। लार्वेल में ऐसा करने का कोई तरीका है? मैं Laravel 5.4

+1

क्या आप अधिक विशिष्ट हो सकते हैं। क्या आपको फिलाल्ड की आवश्यकता है जिसे गणना की जानी चाहिए? या आपको कक्षा की साधारण संपत्ति की आवश्यकता है? – huuuk

+0

ठीक है, मुझे कक्षा की सरल संपत्ति की आवश्यकता है, जो डेटाबेस में कॉलम नहीं बनाते हैं। हालांकि मैं 'नियंत्रक' से डेटा को 'व्यूअर' और 'व्यूअर' से 'कंट्रोलर' तक पास कर पाऊंगा।मैं अपने कुछ गणना उद्देश्यों के मामले में इस संपत्ति का उपयोग करूंगा। और कुछ नहीं। – gdmanandamohon

+0

@lazycoder आपके प्रश्न में, आपने कहा था कि आपको धारावाहिक होने के लिए गुणों की आवश्यकता है? चूंकि स्वीकार किए गए उत्तर में मेरा एकमात्र अंतर है, यह है कि यह बताता है कि क्लास को जेसन डेटा में परिवर्तित करते समय गुणों को क्रमबद्ध कैसे किया जा सकता है। –

उत्तर

0

में ऐसा करने का सबसे अच्छा तरीका है:

$tag->full_name = "Christos Lytras"; 
echo $tag->first_name; // prints "Christos" 
echo $tag->last_name; // prints "Lytras" 

यहाँ एक टिंकर स्क्रीनशॉट है लार्वा वास्तव में custom Mutators के माध्यम से है। इसके अलावा, म्यूटेटर को मॉडल के जेसन या सर आउटपुट डंप में प्रदर्शित करने के लिए कॉन्फ़िगर किया जा सकता है। जैसे PagedListSize के लिए हम हो सकता है:

public functionGetPagedListSizeAttribute() 
{ 
    return #some evaluation; 
} 

protected $appends = array('pagedListSize'); 

इस तरह, pagedListSize केवल एक क्षेत्र के रूप में सीधे उपलब्ध नहीं होंगी बल्कि जब भी मॉडल serialized Json या सरणी के रूप में है उपलब्ध हो।

+0

यही वह है जो मैं उम्मीद कर रहा था !!!!!! – gdmanandamohon

2

पर काम कर रहा हूं आप लार्वेल मॉडल में संरक्षित गुण जोड़ सकते हैं, यह तब तक ठीक है जब तक वे फ़ील्ड-नामों से टकराते नहीं हैं। इसके अलावा, लैरावेल के साथ, माइग्रेशन डीबी संरचनाओं का निर्णय ले रहे हैं, मॉडल नहीं, इसलिए आप स्वचालित रूप से फ़ील्ड बनाने का जोखिम नहीं लेते हैं (वास्तव में, डिफ़ॉल्ट मॉडल बॉक्स के बाहर कोई गुण नहीं होते हैं)।

संपादित करें: डिफ़ॉल्ट पैकेज से उदाहरण User.php

<?php 

namespace App; 

use Illuminate\Notifications\Notifiable; 
use Illuminate\Foundation\Auth\User as Authenticatable; 

class User extends Authenticatable 
{ 
    use Notifiable; 

    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = [ 
     'name', 'email', 'password', 
    ]; 

    /** 
    * The attributes that should be hidden for arrays. 
    * 
    * @var array 
    */ 
    protected $hidden = [ 
     'password', 'remember_token', 
    ]; 

    /** 
    * You can add some properties here 
    * will require getter and/or setters 
    * does not need to be fillable 
    */ 
    protected $someLogicalProperty; 

} 

वास्तविक डाटाबेस संरचना माइग्रेशन (2014_10_12_000000_create_users_table.php) में परिभाषित किया गया है:

Schema::create('users', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->string('name'); 
    $table->string('email')->unique(); 
    $table->string('password'); 
    $table->rememberToken(); 
    $table->timestamps(); 
}); 

आप देख सकते हैं, timestamps और टोकन उपयोगकर्ता मॉडल में भी सूचीबद्ध नहीं हैं। परिभाषित होने पर सभी भरे हुए उपयोगकर्ता ऑब्जेक्ट ($user->name = 'Bob'; पर सार्वजनिक संपत्ति के रूप में सेट करने योग्य होंगे, लेकिन आप इसे()/save() विरासत विधियों के लिए तर्क के रूप में भी पास कर सकते हैं)। इकाइयों को सीधे लैरावेल में नहीं पहुंचाया जाता है, लेकिन यहां हैं और यदि आवश्यक हो तो आगे निर्दिष्ट किया जा सकता है।

+0

क्या आप इस समाधान के बारे में एक कोड सुझा सकते हैं? – gdmanandamohon

4

आप कस्टम Mutators बना सकते हैं ताकि वेरावेल में डेटाबेस फ़ील्ड में मैपिंग के साथ उस प्रकार के कस्टम गुणों को प्राप्त कर सकें।

class Tag extends Model 
{ 
    public function getFullNameAttribute() 
    { 
     return $this->first_name.' '.$this->last_name; 
    } 

    public function setFullNameAttribute($value) 
    { 
     list($this->first_name, $this->last_name) = explode(' ', $value); 
    } 
} 

और उसके बाद आप इस तरह इसका इस्तेमाल कर सकते हैं मॉडल को प्रारंभ करने के बाद:

Artisan Tinker Example

संबंधित मुद्दे