【问题标题】:Return data with no whitespace返回没有空格的数据
【发布时间】:2016-04-25 12:29:02
【问题描述】:

我正在使用 Laravel 5.2。我正在寻找用 eloquent 查询用户名以创建一个独特的个人资料页面。我遇到的问题是用户名返回空白,例如John Doe 我需要它返回没有像 johndoe 或 JohnDoe 这样的空白。谢谢。

public function show($username)
{
    try
    {
        $user = str_replace(' ', '', User::wherename($username)->firstOrFail());
        dd($user);

    }
    catch(ModelNotFoundException $e)
    {
        return redirect()->action('HomeController@index');
    }
}

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    您可以在 User 模型上创建一个函数,该函数返回 name 而没有任何空格。像这样:

    public function getNameWithoutSpaces() {
        return preg_replace('/\s+/', '', $this->name);
    }
    

    这样您就可以在任何需要的地方获取不带空格的名称,而不必一直使用str_replace 函数。

    【讨论】:

    • 最佳答案,真的最好忘记Accessors)))模型))
    • $user = User::where('name', $username)->getNameWithoutSpaces()->first(); dd($user); 这是我现在拥有的,但它说是对未定义方法的调用。
    • 你必须在你的模型上使用这个函数,而不是在查询生成器上。所以你应该做的是User::where('name', $username)->first()->getNameWithoutSpaces()
    • 这似乎对我不起作用。它不会删除空间。
    • 尝试使用preg_replace,应该会得到更好的结果。我更新了我的答案。
    【解决方案2】:
    $user = User::wherename($username)->first()
    
    $UserName = preg_replace('/\s+/', '', $user->name);
    print_r($UserName );die;
    

    【讨论】:

      【解决方案3】:

      这可以帮助 -

      str_replace(" ", "", "John Doe");
      

      或者如果有多个空格(连续)-

      preg_replace('/\s+/', '', "John Doe");
      

      【讨论】:

      • 当我找回 dd 时,null 消失了,但我只得到 ""
      • 尝试打印替换前的值
      【解决方案4】:
      $user = User::wherename($username)->first();
      if($user){
        $user_name = preg_replace('/\s+/', '', $user->name); //or other column that you need to clean
        return dd($user_name);
      } 
      return 'No user found!';
      

      【讨论】:

      • 它返回未找到用户但是当我在 url 中放置一个空格时它将返回用户。
      • 如果没有找到用户,那么您必须检查您在 url 中传递的 $username 参数!
      • 比如说我通过 johndoe。它返回空值。我如何确保我传递的内容能够与记录相匹配,例如我通过 johndoe 它会找到 John Doe 吗?
      • @GarethFrazer 这样做您必须首先确保,当您将数据保存到数据库时。所以你用空格或否来保存它们。
      【解决方案5】:

      更新

      经过讨论,我认为你需要使用slugs

      $user = User::findBySlug($username);
      $name = $user->name;
      

      在这种情况下,您的表中有两列:name(例如,'John Doe')和 slug('JohnDoe' 或 'johndoe ' 或 'John_Doe' 等)。

      原答案

      如果你想从字符串的开头和结尾删除空格,请尝试trim他们:

      $userOriginal = User::where('name', $username)->first();
      $user = trim($userOriginal->name);
      

      要删除所有空格,请使用:

      $user= str_replace(' ', '', User::where('name', $username-)->first()->name);
      

      【讨论】:

      • 当我找回 dd 时,null 消失了,但我只得到 ""
      • 您的查询似乎没有返回任何用户,所以请尝试使用我更新的代码。如果users 表有name 列,它应该可以工作。还要通过dd($userOriginal) 仔细检查;
      • 它仍然为我返回“”。数据库中的用户名是 John Doe,一模一样。
      • first() 是集合的实例,您如何应用修剪??)))您在列trim($userOriginal->column) 上应用修剪或者我不知道这个技巧??))
      • 好的,您的查询似乎没有返回任何内容(null)。我已经向您询问了您的表结构,如果没有这些信息,没有人会给您 100% 的工作代码。
      【解决方案6】:

      你可以在你的用户模型上定义 getter

      public function getNameAttribute() {
          return preg_replace('/\s+/', '', $this->attribute['name'])
      }
      

      之后,当您尝试获取$user->name 时,它总是没有空格。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-15
        • 2016-10-13
        • 1970-01-01
        • 2020-03-26
        • 2016-05-17
        • 2023-01-10
        相关资源
        最近更新 更多