获取ID但显示名称

时间:2014-04-07 13:26:45

标签: php mysql laravel laravel-4 blade

我的表单中有一个自动填充字段,可让我选择联系人姓名并将其与商家信息相关联。

但是,在编辑页面上,它将显示联系人ID,而不是他的名字和姓氏。

我该怎么做?

这是getEdit()

中的ListingsController.php方法
public function getEdit($id)
    {
    // get the nerd
    $listings = Listing::find($id);

        $listings->images = Image::where('listing_id', $id)->get(); 

        $ImagesFileName = ""; 

        $listings->imagesFiles = ""; 


        if ($listings->images) {

            foreach ($listings->images  as $CurImage) {

                $ImagesFileName[] = $CurImage['image_name']; 

            }

            $listings->imagesFiles = implode(",", $ImagesFileName) ;

        }


        $query = DB::table('contacts')->get();
        foreach ($query as $firstname)
        {
            $name[] = $firstname->firstname." ".$firstname->lastname;
        }
        $fullname = json_encode($name);

    // show the edit form and pass the nerd
    $this->layout->content = View::make('listings/edit')
        ->with('listings', $listings)
                ->with('getClientsByLetters', $fullname);
    }

这是action_getClientsByLetters()

中的ListingsController.php
public function action_getClientsByLetters() {
        $term = Input::get('query'); 
        $data = array();
        $query = DB::query("
                SELECT * FROM contacts 
                WHERE MATCH (contact) 
                AGAINST('+".$term."*' IN BOOLEAN MODE)
                ");

        foreach ($query as $results => $contact) {
                $data[] = array(
                        'id' => $contact->id,
                        'value' => $contact->firstname
                );
        }
        return json_encode($data);
    }

这是views/listings/edit.blade.php

中的字段
<p>{{ Form::text('contact_id', null, array('class'=>'form-control', 'placeholder'=>'Contact Name', 'id'=>'contact', 'onblur'=>'test()')) }}</p>

这是同一视图上的javascript代码

$(function() {
    var availableTags = <?php echo $getClientsByLetters; ?>;

    $( "#contact" ).autocomplete({
        source: availableTags,
        minLength: 2,
    });

    });

2 个答案:

答案 0 :(得分:0)

我认为这只是一个方法问题。通常我只是将这种字段设置为SELECT控件,使用ID作为键字段,名称作为显示的选项值。在所有现代浏览器中,默认情况下您在SELECT控件上获得渐进式自动完成功能但是,一个重要的问题是,您是否打算让用户能够在此字段中添加任意新名称,或者是否只允许输入具有已分配ID的现有名称。在后一种情况下,是的,我们可能需要弄清楚如何使自动填充文本字段起作用。

答案 1 :(得分:0)

你的action_getClientsByLetters看起来很近,但我认为它一直在运行。

自动填充是接受一个字符串数组或一个对象数组,其中每个对象都有labelvalue,我认为这是你应该瞄准的目标。

考虑到这一点,我添加了一个函数,其唯一的职责是获取联系人并将它们放入自动完成期望的所需表单中,您可能会使用对象数组,因为它看起来像你以后需要这个ID。

function getContacts()
{
    $contacts = Contact::all();
    $autoComplete = array();
    foreach($contacts as $contact) {
        $autoComplete[]['label']  = $contact->first_name . ' ' . $contact->last_name;
        $autoComplete[]['value'] = $contact->id;
    }
    return json_encode($autoComplete);
}

然后您使用...

调用视图
$this->layout->content = View::make('listings/edit')
    ->with('listings', $listings)
            ->with('getClientsByLetters', $this->getContacts());