Laravel热切模型加载自定义属性

时间:2016-11-16 17:24:09

标签: laravel laravel-5 laravel-5.2

是否有任何可能的方法通过预先加载来获取自定义属性值

例如,在模型上给定此自定义属性:

class User extends Model {
    protected $appends = ['is_member'];

    public function getIsMemberAttribute() {
        return 'yes';
    }
}

和相关模型

class Awards extends Model {

    public function owner(){
        return $this->belongsTo('App\User');

    }

}

我希望能够使用以下请求在集合中获取is_member属性:

$users=Awards::orderBy('created_at')->with('owner')->get();

1 个答案:

答案 0 :(得分:1)

根据Laravel的documentations$appends仅用于追加数组和JSON ......

  

将属性添加到追加列表后,它将包含在模型的数组和JSON表单中。

所以,当你做dd($user)之类的事情时。您将无法看到is_member字段,但当您执行$user->toArray()$user->toJson()之类的操作时,您将会看到is_memberpublic function show($id) { $user = User::get($id); return view('users.show', ['user' => $user->toArray()]); }

基本上,对于始终存在Is Member? : {{ $user['is_member'] }} // Or if you don't like blade you can do this // Is Member? : <?php echo $user['is_member'] ?> 字段的地方。您需要做的就是访问它(例如在页面视图/刀片等中)

Is Member? : {{ $user->is_member ? 'Yes' : 'No' }}

// Again if you don't like blade you can do this
// Is Member? : <?php echo $user['is_member'] ? 'Yes' : 'No'; ?>

然后呢,

====Executing command 'npm install'====    

System.ComponentModel.Win32Exception (0x80004005): The system cannot find the file specified
   at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
   at System.Diagnostics.Process.Start()
   at Microsoft.VisualStudioTools.Project.ProcessOutput..ctor(Process process, Redirector redirector)
Error executing npm - unable to start the npm process
Error - Cannot load global packages.

但正如@Amit在评论中所写的那样,在您将 API 的唯一目的用于此之前,没有任何用例。对于刀片等,您应该更喜欢这样做

<dom-module id="my-button">
     <style is="custom-style">
        paper-dropdown-menu {
            --paper-dropdown-menu-ripple: {
                width: 500px;
            }
        }
    </style>
    <template>
        <content></content>
    </template>
    <script>
        Polymer({
            is: 'my-button'
        })
    </script>
</dom-module>
<my-button>
    <paper-dropdown-menu label="Your favourite pastry">

        <paper-listbox class="dropdown-content">
            <paper-item>Croissant</paper-item>
            <paper-item>Donut</paper-item>
            <paper-item>Financier</paper-item>
            <paper-item>Madeleine</paper-item>
        </paper-listbox>
    </paper-dropdown-menu>
</my-button>

希望这能解决你的疑虑:)