2015-11-03 13 views
9

मैं डेटाबेस से निम्नलिखित बातें लाने के लिए कोशिश कर रहा हूँ:Laravel 5.1: संभाल ही स्तंभ नाम के साथ जुड़ जाता

  • उपयोगकर्ता नाम
  • उपयोगकर्ता avatar_name
  • उपयोगकर्ता avatar_filetype
  • पूरा conversation_messages

निम्न क्वेरी के साथ:

static public function getConversation($id) 
{ 
    $conversation = DB::table('conversation_messages') 
     ->where('belongsTo', $id) 
     ->join('users', 'conversation_messages.sender', '=', 'users.id') 
     ->join('user_avatars', 'conversation_messages.sender', '=', 'user_avatars.id') 
     ->select('users.name', 'conversation_messages.*', 'user_avatars.name', 'user_avatars.filetype') 
     ->get(); 
    return $conversation; 
} 

यह अब तक ठीक काम करता है, लेकिन अवतार का कॉलम नाम 'name' 'users' तालिका से कॉलम नाम की तरह है। तो अगर मैं इस क्वेरी $conversation->name के माध्यम से उत्पादन प्राप्त करने के लिए उपयोग कर रहा हूँ, avatar.name अधिलेखित कर देता है users.name

वहाँ laravel 5.1 पर सुविधा "के रूप में" mysql जैसी क्वेरी उत्पादन का नाम बदलने का कोई तरीका है?

उदाहरण के लिए:

$conversation->avatarName 

$conversation->userName 

उत्तर

16

मेह ठीक .. मैं एक सरल उपाय here

->select('users.name as userName', 'conversation_messages.*', 'user_avatars.name as avatarName', 'user_avatars.filetype') 

आप मैं में शामिल किया है अनुरोध किया "के रूप में-सुविधा" अगले उल्लेख कर सकते हैं के रूप में मिल गया है table.columnName

0

हाँ, बस किसी भी तालिका पर कॉलम का नाम बदलें और इसे काम करना चाहिए। इसके अलावा आप क्या कर सकते हैं, उपयोगकर्ता नाम को किसी भी चीज़ का नाम बदलें, आईडी पर बातचीत_मेसेज के प्रेषक कॉलम का नाम बदलें और प्राकृतिक जुड़ें।

+0

हाँ, यह भी तो मेरा पहला विचार किया गया था। लेकिन एक विचार, कि एक सतत नामकरण प्रत्येक डेटाबेस पर एक अच्छी सुविधा है। अपना खुद का जवाब देखें: मुझे काफी अच्छा समाधान मिला है। :) –

2

तीन टेबल कर्मचारियों, ग्राहकों और बुकिंग (पिवट तालिका) में शामिल होने का प्रयास करने के इस उदाहरण पर नज़र डालें।

$result = Donation::join('user', 'user.id', '=', 'donation.user_id')->where('user.email', '[email protected]')->first(); 

$resultDonation मॉडल का एक संग्रह है:

$bookings = \DB::table('bookings') 
     ->join('staffs', 'staffs.id' , '=', 'bookings.staff_id') 
     ->join('customers', 'customers.id' , '=', 'bookings.customer_id') 
     ->select('bookings.id', 'bookings.start_time', 'bookings.end_time', 'bookings.service', 'staffs.name as Staff-Name', 'customers.name as Customer-Name') 
     ->orderBy('customers.name', 'desc') 
     ->get(); 
    return view('booking.index') 
      ->with('bookings', $bookings); 
0

मैं निम्नलिखित समस्या, सरलीकृत उदाहरण था। लेकिन CAREFUL:

दोनों तालिकाओं में 'बनाया_at' कॉलम है। $result->created_at करते समय अब ​​created_at प्रदर्शित किया गया है? मुझे नहीं पता। ऐसा लगता है कि बोलने के दौरान बोलने वाला एक प्रभाव select * कर रहा है, मॉडल Donation लौटा रहा है लेकिन अतिरिक्त विशेषताओं के साथ। created_at यादृच्छिक लगता है। तो क्या मैं वास्तव में चाहता था, ईमेल [email protected]

समाधान के साथ उपयोगकर्ता के सभी Donation मॉडल की वापसी इस है:

$result = Donation::select('donation.*')->join('user', 'user.id', '=', 'donation.user_id')->where('user.email', '[email protected]')->first(); 
संबंधित मुद्दे