【问题标题】:Getting specific information in controller?在控制器中获取特定信息?
【发布时间】:2019-11-28 00:02:28
【问题描述】:

我的控制器出现问题并在其中获取数据。我的问题是,当我让我的团队这样时:

$team = Team::where('join_number', '=', $data['team'])->get();

我似乎无法通过去访问它

$team->join_request_needed = 'True'

例如?如果我只是死转储

$team->join_request_needed

我收到“此集合实例上不存在属性 [join_request_needed]”。 我如何访问这些数据?如果我死了转储$team,我会得到这个;所以它得到了数据?

Illuminate\Database\Eloquent\Collection {#282 ▼
  #items: array:1 [▼
    0 => App\Team {#291 ▼
      #guarded: []
      #connection: "sqlite"
      #table: "teams"
      #primaryKey: "id"
      #keyType: "int"
      +incrementing: true
      #with: []
      #withCount: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:8 [▶]
      #original: array:8 [▼
        "id" => "1"
        "user_id" => "1"
        "name" => "team1"
        "description" => null
        "join_request_needed" => "0"
        "join_number" => "1574832472024"
        "created_at" => "2019-11-27 05:27:52"
        "updated_at" => "2019-11-27 22:46:55"
      ]
      #changes: []
      #casts: []
      #dates: []
      #dateFormat: null
      #appends: []
      #dispatchesEvents: []
      #observables: []
      #relations: []
      #touches: []
      +timestamps: true
      #hidden: []
      #visible: []
      #fillable: []
    }
  ]
}

这是我的全部功能(到目前为止只是粗略,因为我一直在获取数据):

public function check() {
    $data = request()->validate([
        'email' => ['required', 'email'],
        'team' => ['required', 'alpha_num', 'exists:teams,join_number']
    ]);

    $team = Team::where('join_number', '=', $data['team'])->get();

    if ($team->join_request_needed = 'True') {
        if (Member::where('email', '=', $data['email'])->count() > 0) {
            $member = Member::where('email', '=', $data['email']);
            if ($member->approved = 'True') {
                // member has been accepted
                return view('portal.members.answer', [
                    'team' => $team
                ]); // questions
            } else {
                // member has not been accepted
                dd('member has not been accepted');
                return view(''); // waiting screen
            }
        } else {
            // create a join request for the member
            $team->member()->create([
                'email' => $data['email']
            ]);
            return view(''); // waiting screen
        }
    } else if(Member::where('email', '=', $data['email'])->count() > 0) {
        // no join request needed, member already exists
        return view('portal.members.answer', [
            'team' => $team
        ]); // questions
    } else {
        // no join request needed, need to create member
        dd($team);
        $team->member()->create([
            'email' => $data['email']
        ]);
        return view('portal.members.answer', [
            'team' => $team
        ]); // questions
    }
}

【问题讨论】:

  • 看起来你的 if 是错误的,你正在使用值 $team->join_request_needed 设置信息 True,这返回 true 因为你可以设置属性的值。 if ($team->join_request_needed = 'True') { 是您设置值的点。请注意,您需要将== (两个等于)进行比较。并与不带单引号的falsetrue 进行比较。单引号表示您的变量是字符串,而不是布尔值
  • @WilliamPrigolLopes 抱歉,更新了问题。我得到一个错误只是'$team->join_request_needed'所以这还没有关系
  • 要访问您需要在第一个位置调用,get() 函数返回一个集合。如果你打电话给$team[0]->join_request_needed 应该可以。
  • 但是 team 是一个团队的集合,用 first() 让第一个团队出来还不够吗?

标签: php laravel controller laravel-6 laravel-6.2


【解决方案1】:

在您的情况下,Team 是 Teams 的集合,因此您可以使用 querybuilder 方法 first()

$team = Team::where('join_number', '=', $data['team'])->first();

由于查询的工作方式,在查询生成器上调用 get 将始终返回一个集合。如果你想要单个对象first()find() 是选项。

【讨论】:

    【解决方案2】:

    既然你得到了Teamjoin_number = $data['team'] 的集合 您需要先为$team 循环。但是如果你只想拥有一个拥有join_number = $data['team'] 的$team,你应该使用first() 而不是get()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-26
      • 2010-09-29
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多