2015-05-26 13 views
9

प्रोपेल Peer कक्षाओं का उपयोग करता है, औरविधियों के साथ वास्तविक वस्तु को प्रदूषित किए बिना, संबंधित वस्तुओं और ऑब्जेक्ट गुणों में हेरफेर करने के तरीके के रूप में सिद्धांत Table कक्षाओं का उपयोग किया जाता है।लार्वेल (एलोक्वेंट) टेबल || पीयर समकक्ष

लार्वेल (वाक्प्रचार) दस्तावेज़ों की सरसरी नज़र के बाद, मुझे ऐसा कुछ भी नहीं देखा जो वही Peer या Table कार्यक्षमता की तरह प्रदान करता है। मेरा सवाल है, क्या लार्वेल (या बोलने वाला) इस तरह के वर्गों के लिए नामस्थान प्रदान करता है, या क्या मैं सिर्फ Table का उपयोग करता हूं और ऑटोलोडर को बाकी की देखभाल करने देता हूं?

// Example use of a table class in doctrine 1.2 
$user = UserTable::getInstance()->findById(1); 

- अपडेट 1 -

कैसे एक सिद्धांत तालिका वर्ग इस्तेमाल किया जा सकता का

लेमैन उदाहरण:

class UserTable 
{ 
    public static function getInstance() 
    { 
     return Doctrine_Core::getTable('User'); 
    } 

    public function linkFoo($userId, array $foos) 
    { 
     $user = $this->findById($userId); 

     foreach ($foos as $foo) { 

      $user->foo = $foo; 

      $user->save(); 
     } 
    } 
} 

// SomeController.php 
executeSaveFoo() 
{ 
    UserTable::getInstance()->linkFoo($this->getUser(), array('foo1', 'foo2')); 
} 

सिद्धांत तालिका वर्ग के उद्देश्य के एक API प्रदान करना है संबंधित वस्तुओं के खिलाफ कार्रवाइयों के लिए जो नियंत्रक में नहीं होना चाहिए, उपर्युक्त उदाहरण में linkFoo कक्षा संबंधित उपयोगकर्ता ऑब्जेक्ट को प्रदान की गई लिंक को लिंक करेगी।

मुझे लगता है कि ऑब्जेक्ट्स और 'टेबल' कक्षाओं के बीच अलगाव महत्वपूर्ण है, क्योंकि किसी ऑब्जेक्ट को यह नहीं पता होना चाहिए कि कैसे तुरंत चालू किया जाए और न ही हाइड्रेट करें।

+0

आप क्या ऊपर अपने उदाहरण सिद्ध या वास्तव में क्या यह कर रहा है व्याख्या कर सकते हैं? – aethergy

+1

भाषण के साथ आप केवल एक वर्ग प्रति मॉडल (और आमतौर पर डेटाबेस तालिका) रखते हैं लेकिन आपको इसे किसी भी चीज़ के साथ "प्रदूषित" करने की आवश्यकता नहीं है। कृपया दस्तावेज़ीकरण पढ़ें और/या स्पष्ट करें कि आपकी समस्या क्या है। – lukasgeiter

+0

मैंने इसे 'कुछ भी' के साथ प्रदूषित नहीं किया, मैं 'स्थैतिक' विधियों के बारे में विशिष्ट था। क्या उपर्युक्त उदाहरण के अनुसार ऑब्जेक्ट को पास करने के लिए यह समझ में आता है? –

उत्तर

5

जैसा कि पहले उल्लेख किया गया है, कार्य को पूरा करने के एक से अधिक तरीके हैं, लेकिन यहां कमांड का उपयोग करके एक त्वरित उदाहरण है।

नियंत्रक

namespace App\Http\Controllers; 

//... 
use App\Http\Requests\UpdateUserRequest; 
use App\Commands\UpdateUser; 
use App\User; 
//... 

class UserController extends Controller { 

/** 
* Update the specified resource in storage. 
* 
* @param int $id 
* @return Response 
*/ 
public function update(UpdateUserRequest $request, $id) 
{ 
    //gather request data 
    $data = $request->all(); 

    //retrieve user 
    $user= User::findOrFail($id); 

    //update user 
    $updateUser = \Bus::dispatch(
         new UpdateUser($user, $data) 
        ); 

    //check if update was successful 
    if($updateUser) 
    { 
     //update successful 
     return redirect('/route/here')->with('message', 'User updated successfully'); 
    } 
    else 
    { 
     //else redirect back with error message 
     return redirect()->back()->with('error', 'Error updating user'); 
    } 
} 
} 

UpdateUserRequest वर्ग मान्यता संभाल होगा।

कमान

namespace App\Commands; 

use App\Commands\Command; 

use Illuminate\Contracts\Bus\SelfHandling; 

class UpdateUser extends Command implements SelfHandling { 

    protected $user, $data; 

    /** 
    * Create a new command instance. 
    */ 
    public function __construct($user, $data) 
    { 
     $this->user= $user; 
     $this->data = $data; 
    } 

    /** 
    * Execute the command. 
    */ 
    public function handle() 
    { 
     //assign first name 
     $this->user->first_name = $this->data['first_name']; 

     //assign last name 
     $this->user->last_name = $this->data['last_name']; 

     //assign email address 
     $this->user->email = $this->data['email']; 

     //update user 
     if($this->user->update()) 
     { 
      //updated successfully, return true 
      return true; 
     } 
     else 
     { 
      //else return false 
      return false; 
     } 
    } 

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